理解几种常见Web攻击方式的原理

XSS攻击

XSS的本质是什么?

XSS的本质是一种“Html注入”,用户的数据被当成了Html代码的一部分来执行,从而混淆了原本的语义,产生了新的语义

XSS可以做哪些坏事?

  1. 修改页面Dom,影响页面正常展示
  2. 盗取Cookie信息,伪造身份登录网站
  3. 在用户不知情的情况下发送请求
  4. 伪造表单,窃取用户隐私信息,如:邮箱、登录密码
  5. 获取操作系统、客户端、IP等信息,针对性地进行木马攻击

如何防御?

HttpOnly

适用于站点被XSS攻击时,避免Cookie信息被窃取

输入检查

在将输入存进数据库之前对其进行检查,过滤/转义特殊字符,或直接驳回入库请求

输出检查

在内容输出到页面之前,对其中的特殊字符进行转义,注意以下操作:

  • document.write
  • ele.innerHtml
  • ele.outerHtml

同时也需注意以下几处内容来源:

  • window.location(search、hash等)
  • window.name
  • document.cookie

CSRF攻击

CSRF攻击的本质是什么?

对于那些本地已保存用户登录信息的网站,攻击者通过诱导的方式,在用户不知情的情况下,非法发送请求,从而达到攻击的目的

为什么会遭到CSRF攻击?

原因大致可归为以下几点:

  1. 请求的参数有一定规律,很容易构造
  2. 服务端对于请求来源的验证不足

如何防御?

验证码

服务端针对某一些重要的请求,可以要求用户输入验证码,增加攻击者构造请求参数的难度

Referer Check

服务端校验Http Refer Header的值,如果请求方是在白名单内,则允许请求,否则可视为正被CSRF攻击

Token

Token可以防御CSRF攻击的原因具体有以下几点:

  1. Token遵循“不可预见性原则”,需保证随机性和保密性,这样就很难伪造
  2. Token具有自己的生命周期,被消耗后立即失效
  3. Token可由服务端输出到页面中,或客户端单独获取,但不存在Cookie中,这样做可避免请求时被默认发送的问题

参考

  • 《白帽子讲Web安全》 吴翰清 著