<-Home

XSS && CSRF

XSS (CROSS SITE SCRIPT)

https://www.zhihu.com/collection/145923418 https://tech.meituan.com/2018/09/27/fe-security.html

XSS 漏洞通常指的是网站对用户输入的数据未做有效过滤,攻击方可以将恶意脚本注入网站页面中,达到当用户浏览该网站页面的时候执行恶意代码的目的,如盗取用户的cookie信息,破坏页面结构、无脑重定向到其他网站等操作;例如一个Get请求中攻击者将脚本放在某个参数中,服务端未进行过滤,返回该脚本参数,客户端将脚本参数渲染到页面中完成攻击;

XSS 分类:

  1. 反射型: 反射型XSS 又称为非持久型跨站脚本,做法是将攻击脚本放在URL参数中,而不是存储到服务器,因此多数需要诱导网站用户点击才会触发攻击;

  2. 存储型: 存储型XSS 又称为持久型跨站脚本;攻击者通过如 评论、帖子、博客等方式将攻击脚本持久化到服务器数据库中,然后引导用户访问特定页面执行从服务端请求回来渲染好的攻击脚本达到目的;

  3. DOM 型 DOM 型XSS 也是反射性 XSS的一种,区别在于 DOM 型XSS 不经过服务端也可完成攻击,将攻击脚本放入URL访问参数中,需要通过 获取URL参数数据进行处理更新到页面的页面拿到攻击脚本后更新到页面就能完成攻击;

XSS 结合 Ajax 技术进行攻击是最常用的方式,一个典型的场景是微博中的蠕虫XSS:

  • 利用 XSS 漏洞插入恶意js代码;
  • 在恶意代码中 利用Ajax发送请求,如发表微博、关注用户、获取关注的人的关注列表并发送私信给列表中的人
  • 发表的微博和 发送的私信都是包含恶意代码的连接,如果用户点击,则又进一步循环攻击,巩固恶意代码的自我复制和传播能力;

XSS 防御:

网页页面上任何可以输入的地方如果在使用数据时没有对数据进行过滤处理的话,都可能存在XSS漏洞;漏洞的危险程度取决于攻击代码的威力,攻击代码也不局限于script; 防御XSS攻击最简单直接的方式就是对用户的输入进行过滤:

  • 在不需要用户进行HTML输入的时候,直接对用户输入进行HTML转移处理;
  • 如果需要用用户输入HTML,增加白名单,只提取白名单内的属性值得,去除不安全的标签,如script;去除特殊保留字:如javascript:

CSRF (CROSS SITE REQUEST FORGERY)

知乎-https://www.zhihu.com/collection/145923418

CSRF 可以简单的理解为:攻击者盗用了已完成认证用户的身份,以其名义发送恶意请求,容易造成个人隐私泄露及财产安全;

csrf-process.png

如上图所示,完成一次CSRF攻击,其中必要的流程包括但不限于:

  • 用户登录受信任的网站,并在本地生成cookie信息;
  • 在没有登出清除cookie的情况下访问恶意网站;

不管是 GET 还是 Post 请求,CSRF 模拟完成进行攻击;

CSRF 的防御

  • 关键请求操作只接受POST请求;
  • 手机验证码操作; 这个会影响用户体验;

  • Referer 检测; 通过白名单方式对请求的referer 请求头进行过滤;关于这一点,服务器并不是任何时候都能接收到referer值;

  • 随机token验证:token验证是目前主流防御CSRF的方式; CSRF 攻击要成功的条件在于攻击者能够准确地预测所有的参数从而构造出合法的请求,所以根据不可预测性原则,我们可以对参数进行加密从而防止 CSRF 攻击,可以保存其原有参数不变,另外添加一个参数 Token,其值是随机的,这样攻击者因为不知道 Token 而无法构造出合法的请求进行攻击,所以我们在构造请求时候只需要保证:

    1. Token 要足够随机,使攻击者无法准确预测
    2. Token 是一次性的,即每次请求成功后要更新 Token,增加预测难度
    3. Token 要主要保密性,敏感操作使用 POST,防止 Token 出现在 URL 中