CSRF 跨站点请求伪造

前言

CSRF(Cross Site Request Forgery, 跨站点请求伪造)是一种网络的攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执行在权限保护之下的操作,有很大的危害性。

具体应用

CSRF攻击的条件有以下两个必备条件:

  1. 用户登录正常网站A,且会话有效;
  2. 用户在同一浏览器打开非法网站B,且非法网站B存在一个诱使用户点击的链接,该链接触发GET或表单POST请求给正常网站A,比如,在用户毫不知情的情况下,删除或修改用户的一些信息等;

如何防御

  1. 在请求地址中添加随机token并验证

    随机token的作用:既可以防御CSRF攻击,也可以防止表单重复提交。

  2. 将本操作与前一次操作建立关联,防止本操作是个独立提交的操作,比如:个人中心 -> 修改安全问题操作,首先要进行手机号或安全问题认证,认证通过后才进入修改安全问题表单页面,那么,我们就可以在前一步认证通过之后,返回一个随机认证的authToken给客户端,然后,下一步修改操作表单提交时,需要验证此authToken的合法性。这样,通过将前后两个操作建立关联的方式,来防止CSRF攻击;

  3. 验证 HTTP Referer 字段值是否是本网站域名的请求;

    不建议单独使用但可配合token一起使用,因为HTTP Referer容易伪造。

  4. 修改用户信息操作少用GET请求,这样仅一个地址就可以触发CSRF攻击,建议使用含随机token的表单POST提交请求;

    此方式只能增加CSRF伪造的成本,并不能防止CSRF攻击。