什么是CSRF
跨站请求伪造(英语:Cross-site request forgery),也被称为one-click attack 或者session riding,通常缩写为CSRF 或者XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
CSRF攻击原理
2、User在没有登出WebA的情况下访问危险网站WebB,WebB引导User访问WebA并发出一个Requset请求。
3、浏览器根据WebB的请求带着之前产生的Cookie访问WebA,WebA接收到请求进行处理,这时WebB就达到了模拟用户请求WebA的目的。
基本防护措施
1、客户端与服务端以POST方式传输
2、服务端验证HTTP Referer字段
3、使用验证码
4、不通过form发送数据,如:Ajax发送Json数据,Ajax本身限制跨域请求,很大可能的避免CSRF攻击
5、添加Token验证
在表单中添加服务端随机生成的Token,提交后服务端进行Token验证。由于Token的存在,攻击者无法再构造一个带有合法Token的请求实施CSRF攻击(前提是网站无XSS泄露问题,所以一般结合XSS防御一起使用)。
总结
以上罗列了防御CSRF攻击常见的一些方式,其中最常见的是添加Token验证的方式,同时要注意Token的保密性和随机性。这种方式可能也会出现相应的问题如:多个表单页或多个tab页提交时Token相互覆盖的问题,这时候就该对应改变生成Token的策略。