csrf

Posted on 周五 27 二月 2015 in misc


什么是csrf?

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:oneclick attack/session riding,缩写为:CSRF/XSRF。

CSRF可以做什么?

攻击者盗用了你的身份,以你的名义发送恶意请求,如:发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账等

CSRF的原理

要完成一次CSRF攻击,受害者必须依次完成两个步骤:

1.登录受信任网站A,并在本地生成Cookie。

2.在不登出A的情况下,访问危险网站B。

看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。是的,确实如此,但你不能保证以下情况不会发生:

1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。

2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了......)

CSRF的防御

  • 在请求地址中添加token并验证
    • 在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端建立一个拦截器来验证这个token。
  • 验证HTTP Referer字段
    • 验证上一个页面是否是网站自己的请求
  • 在HTTP头中自定义属性并验证
    • 通过XMLHttpRequest这个类,可以一次性给所有该类请求加上csrftoken这个HTTP头属性,并把token值放入其中。
  • 限制验证cookie的到期时间
    • 时间越短越安全,用户越不方便,需要平衡
  • 关键操作添加验证码或者验证密码