CSRF

Cross Site Request Forgery, 即跨站请求伪造。

原理

前提是向目标网站注入恶意代码并获得了用户身份信息(Cookie),该恶意代码的作用是在用户主动或不知情(如img标签)的情况下请求欺诈网站,然后在欺诈网站上带上获得的用户身份信息请求目标网站,从而达到攻击的目的。简单来说就是:攻击者盗用用户身份发起恶意请求。

CSRF因为需要注入代码、获得cookie,所以是在XSS攻击基础上发起的。

防御

  • 表单提交生成表单令牌(Token), 服务端每次提交需要校验令牌。
  • 使用验证码
  • 验证referer头

XSS

Cross-site Scripting(XSS) 跨站脚本攻击,主要利用HTML和JavaScript代码注入。

主要原理

网站程序(前端和后端)未对用户提交/请求的数据进行检查和过滤,将包含JavaScript代码的数据直接输出到浏览器解释执行。

类型

  • 反射型XSS

反射型XSS只是简单的把用户输入的数据“反射”给浏览器,也就是说需要诱使用户“点击”一个恶意链接,才能攻击成功。反射型XSS也叫作“非持久型XSS”。

  • 存储型XSS

主动提交恶意数据到服务器,攻击者在数据中嵌入代码,这样当其他用户请求后,服务器从数据库中查询数据并发给用户,用户浏览此类页面时就可能受到攻击。

  • DOM-based XSS

基于DOM的XSS,通过对具体DOM代码进行分析,根据实际情况构造DOM节点进行XSS跨站脚本攻击。

防御

  • 输入过滤,对用户提交/请求的数据进行转义或过滤HTML标签
  • 输出转义
  • 考虑设置HTTP Only Cookie

参考资料