Open yaofly2012 opened 5 years ago
也缩写成XSRF
。
利用被攻击网站服务器对用户网页浏览器的信任。
当用户浏览恶意网页时,攻击者通过一些技术手段欺骗用户的浏览器去访问一个用户曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。因为请求也是携带认证cookie信息的,服务端没有合适的防御措施的话就很难识别请求是用户正常请求还是CSRF
请求。
结合原理和CSRF
命名可以看出CSRF
的特点:
直接引入前端安全系列之二:如何防止CSRF攻击?的DEMO:
受害者登录a.com,并保留了登录凭证(Cookie)。 攻击者引诱受害者访问了b.com。 b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie。 a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。 a.com以受害者的名义执行了act=xx。 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作。
针对CSRF
的攻击原理,制定防御策略:
Referer
字段Referer
配置不准确的话,很容易阻断正常请求;Referer
;
总之不推荐使用
注意: 在CSRF
攻击中,Referer
是无法伪造的。token
并验证[科普]跨站请求伪造-CSRF防护方法
利用token
标记合法请求。
CSRF token
的生成,下发,上送,校验由服务端生成随机唯一的字符串(GUID, UUID等),并保存到服务端的session
或者其他服务端缓存(如Redis);
token
的缓存最好有过期时间;如果希望提高token
的安全性可以对生成的token
进行对称加密
。
下发是服务端如何把生成的CSRF token
传给客户端,方式很多了,看客户端怎么方便提取并传给后端。
通过Set-Cookie
下发;
Axios CSRF 防御就是采用这种方式。但是此时服务端不能从cookie里获取CSRF token
喷到页面里作为约定的全局变量;
最好和后端一起确定一个标准的下发和上送方式。
上送:是客户端调用接口时提取CSRF token
并传给服务。看请求接口类型也后很多上送方式。
GET
请求可以放入queryString里;Form POST
请求可以添加隐藏域;AJAX
, fetch
请求还可以采用放入request header里;注意:CSRF token
最好别通过cookie方式上送。
token
;Seesion
获取缓存的值对比。CSFR
重要的场景都需要并且建议采用token
方案,一些常见的case有:
缩写CSS
一般表示层叠样式表,所以Cross-site Scripting缩写是XSS
。
利用浏览器在渲染HTML字符串时会执行相应的脚本:
scripts
标签指定的脚本;href
, onerror
等特性指定的脚本这些恶意代码一般上送用户的cookie等敏感信息,或者执行挖矿代码。
XSS 攻击一般分为两类:
恶意脚本通过被攻击的网站的URL注入。相对于存储型的 XSS 攻击,反射型XSS攻击是一种非持久性XSS攻击。常见于页面渲染的数据来自URL,比如搜索关键词等。
恶意脚本被存储到被攻击的网站服务器了,当用于访问受攻击的页面时就会执行恶意代码。常见于有表单的网站,比如评论等。
在渲染用户输入的字符串时进行转义处理,把<
和>
等字符转成HTML实体形式【必须】;
如果渲染的数据来自富文本编辑器,可以只转义<script>
, </script>
等非法标签或者特性的,可以借助第三方库(如下)。
存储型XSS攻击中可以在录入数据的环节过滤掉非法字符<script>
, </script>
【最好】。
React默认是阻止XSS攻击的。但是如果使用了dangerouslySetInnerHTML
属性那开发就得自己处理XSS攻击了。
待研究
import xss from "xss"
const str = `
<div>
<p>hello</p>
<a href="javascript:alert('hell0');">hello</a>
<script>
console.log('xss attack')
</script>
</div>
`
export default function Index() {
const p = xss(str);
console.log(p)
return <div>
<h1>XSS</h1>
<p>{str}</p>
<p dangerouslySetInnerHTML={{__html: p}}/>
</div>
}
Content Security Policy (CSP)主要是用来定义页面可以加载哪些资源,可用于浏览器抵御XSS攻击。
看了下JD,携程首页都没有使用。
XSS
MIME混淆攻击
CSRF攻击: https://segmentfault.com/a/1190000016659945#articleHeader0
XXSI
幽灵和熔断漏洞(Spectre & Meltdown)
Site Isolation
流量攻击,DDoS(Distributed denial-of-service, 分布式拒绝服务) 攻击 利用大批量“流量”消耗被攻击服务器资源。 分布式:攻击者利用傀儡机(分布式的代理)发起攻击,主要目的隐藏自己身份; 拒绝服务:是指攻击的结果导致被攻击的服务器“拒绝服务”。
肉鸡
前端安全系列(二):如何防止CSRF攻击? egg Web 安全