CSRF跨站请求伪造与XSS跨域脚本攻击讨论

今天和朋友讨论网站安全问题,聊到了csrf和xss,刚开始对两者不是神明白,经过查阅与讨论,整理了如下资料,与大家分享.

CSRFCross-site request forgery):跨站请求伪造。

CSRF跨站请求伪造与XSS跨域脚本攻击讨论

从上图可以看出,要完成一次CSRF攻击,受害者必须满足两个必要的条件:

1)登录受信任网站A,并在本地生成Cookie。(如果用户没有登录网站A,那么网站B在诱导的时候,请求网站Aapi接口时,会提示你登录)

2)在不登出A的情况下,访问危险网站B(其实是利用了网站A的漏洞)。

案例:GET类型的 CSRF

<img src=http://wooyun.org/csrf?xx=11 />

案例:POST类型的 CSRF

<iframe style="display:none" name="csrf-frame"></iframe>

<form method=‘POST‘ action=‘http://www.bank.example/withdraw‘ target="csrf-frame" id="csrf-form">

      <input type=‘hidden‘ name=‘account‘ value=‘daguanren1‘>

      <input type=‘hidden‘ name=‘amount‘ value=‘888‘>

      <input type=‘hidden‘ name=‘for‘ value=‘jinlian‘>

      <input type=‘submit‘ value=‘submit‘>

</form>

<script>document.getElementById("csrf-form").submit()</script>

解决方案:

1.每次请求带token校验

2.验证 HTTP Referer 字段;

3.HTTP 头中自定义属性并验证;

4.Chrome浏览器端启用SameSite cookie

XSSCross Site Scripting):跨域脚本攻击

XSS攻击的核心原理是:不需要你做任何的登录认证,它会通过合法的操作(比如在url中输入、在评论框中输入),向你的页面注入脚本(可能是jshmtl代码块等)。

最后导致的结果可能是:盗用Cookie破坏页面的正常结构,插入广告等恶意内容D-doss攻击

还可以用富文本做参数去请求,或者模拟多个(比如1000)站点,每个站点有多个用户(比如1000)去发送站内请求,进行流量攻击

案例:

http://127.0.0.1:5000/hello4?name=<script>alert(‘Bingo!‘)</script>

那么客户端收到的响应将变成下面的代码:

<h1>Hello,<script>alert(‘Gingo!‘)</script>!</h1>

当客户端收到响应后,浏览器解析这行代码就会打开一个弹窗,如下

CSRF跨站请求伪造与XSS跨域脚本攻击讨论

1、编码:

  对用户输入的数据进行HTML Entity 编码。把字符转换成 转义字符

2、过滤:

  移除用户输入的和事件相关的属性。如onerror可以自动触发攻击,还有onclick等。

(总而言是,过滤掉一些不安全的内容)移除用户输入的Style节点、Script节点、Iframe节点。 (尤其是Script节点,它可是支持跨域的呀,一定要移除)    

3、校正

  避免直接对HTML Entity进行解码。使用DOM Parse转换,校正不配对的DOM标签。

CSRF XSS 的区别

区别一:

CSRF:需要用户先登录网站A,获取 cookieXSS:不需要登录。

区别二:(原理的区别)

CSRF:是利用网站A本身的漏洞,去请求网站AapiXSS:是向网站 A 注入 JS代码,然后执行 JS 里的代码,篡改网站A的内容。

参考资料:

From:https://www.daguanren.cc/post/csrf-introduction.html
From:https://blog.csdn.net/stpeace/article/details/53512283
CSRF 攻击的应对之道:https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf
WEB三大攻击之—CSRF攻击与防护:https://www.daguanren.cc/post/csrf-introduction.html
浅谈 CSRF 攻击方式:https://www.jianshu.com/p/ffb99fc70646
CSRF 攻击与防御:https://www.cnblogs.com/phpstudy2015-6/p/6771239.html
《白帽子讲web安全》CSRF 实例:https://www.jianshu.com/p/94fd1a5d5413
CSRF实例:https://blog.csdn.net/wst0717/article/details/81542289

相关推荐