防CSRF攻击思路

  张三登录银行网站,并给李四转账¥100,转账API为:http://www.bank.com/transfer.php?to=lisi&amount=100
 
  此时黑客给张三发了一个超链接(http://www.xxx.com/美女.html),该页面含有恶意代码:<img src="http://www.bank.com/transfer.php?to=hacker&amount=999">
 
  如果张三打开黑客发过来的超链接就会请求转账API,由于张三仍处于登录银行网站状态,就会向黑客转账¥999,这就是CSRF攻击。
 
 
 
  从上面的流程可以看出,想防CSRF攻击主要手段就是严格检查请求是否为用户本人自愿发起,常用的方法就是使用token。
 
  在用户访问需要防CSRF攻击的页面时(一般是表单填写页面),服务端生成一个随机token,并保存到session中,然后在表单设置一个隐藏输入字段:
 
  <input type="hidden" name="csrf_token" value="<?php echo $csrf_token; ?>">
 
  提交表单时需要把token也带上,服务端拿到token后检查是否合法,合法才响应请求。
 
  需要注意的是token只能使用一次,即在判断token是否合法后需要立即销毁,不管判断结果是合法还是不合法。
 
  温馨提示:大部分较新版本浏览器由于同源策略已经能帮助开发者抵御部分CSRF攻击,但对于少部分老旧浏览器(如IE浏览器)还是有CSRF攻击风险,所以开发时依然要做好CSRF攻击防御措施。

Copyright © 2024 码农人生. All Rights Reserved