整理 XSS与CSRF

总结XSS与CSRF两种跨站攻击

XSS:跨站脚本(Cross-site scripting)
CSRF:跨站请求伪造(Cross-site request forgery)

XSS:脚本中的不速之客

XSS全称“跨站脚本”,是注入攻击的一种。其特点是不对服务器造成任何伤害,而是通过一些正常的站内交互途径,例如发布评论,提交含有JavaScript的内容文本。这时服务器端如果没有过滤或转移掉这些脚本,作为内容发布到了页面上,其他用户访问这个页面的时候就会运行这些脚本。

XSS防御手段

原则: 不相信客户输入的数据
注意: 攻击代码不一定在<script></script>中

  1. 将重要的cookie标记为http only,这样的话JavaScript中的document.cookie语句就不能获取到cookie了。
  2. 只允许用户输入我们期望的数据。例如:年龄的textbox中,只允许用户输入数字。而数字之外的字符都过略掉。
  3. 对数据进行Html Encode处理
  4. 过滤或移除特殊的Html标签,例如:<script>,<iframe>,&it;\for <, &gt;\for>, &quot \for
  5. 过滤JavaScript事件的标签。例如 onclick= , onfocus等等。

CSRF:冒充用户之手

CSRF,中文是跨站点请求伪造。CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击页面对目标网站发起伪造用户操作,达到攻击目的。

CSRF攻击的本质原因

CSRF攻击是源于Web的隐式身份验证机制!Web的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的。CSRF攻击的一般是由服务端解决的。

CSRF工具的防御手段

  1. 尽量使用POST,限制GET
    GET接口太容易被拿来做CSRF攻击,当然POST并不是万无一失,攻击者只要构建一个form就可以,但需要在第三方页面做,这样就增加暴露的可能性。

  2. 浏览器Cookie策略
    拦截第三方本地Cookie(Thired-party Cookie)的发生。

  3. 加验证码

  4. Referer Check

  5. Anti CSRF Token
    现在业界对CSRF的防御,一致的做法是使用一个Token(Anti CSRF Token)

例子:

  1. 用户访问某个表单页面。
  2. 服务端生成一个Token,放在用户的Session中,或者浏览器的Cookie中。
  3. 在页面表单附带上Token参数。
  4. 用户提交请求后,服务端验证表单中的Token是否与用户Session(或Cookies)中的Token一致,一致为合法请求,不是则非法请求。

这个Token的值必须是随机的,不可预测的。由于Token的存在,攻击者无法再构建一个带有合法Token的请求实施CSRF攻击。另外使用Token时应注意Token的保密性,尽量把敏感操作由GET改为POST,以form或AJAX形式提交,避免Token泄露。

注意:
CSRF的Token仅仅用于对抗CSRF攻击。当网站同时存在XSS漏洞时候,那这个方案也是空谈。所以XSS带来的问题,应该使用XSS的防御方案予以解决。

posted @ 2020-09-23 16:57  lemon-Xu  阅读(171)  评论(0编辑  收藏  举报