何为CSRF攻击
Cross Site Request Forgery跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
举个栗子:当用户在浏览器中同时打开一个安全网站和一个恶意网站时,恶意网站的html的代码中有一段是对应于安全网站的某一操作的,此时安全网站因为已经认证过了浏览器的信息会认为该请求是由用户发出的会运行相应的程序,导致用户在不知情的状况下产生损失。
- 当用户通过浏览器进入某一网站时,验证通过,会在用户处产生安全网站的Cookie,当用户同时访问恶意网站时,用户会带着恶意网站发出的请求再次访问安全网站,浏览器会带着该Cookie再次访问安全网站,此时安全网站会根据用户的权限处理其请求,此时恶意网站就达到其目的了。(就是说用户的浏览器在恶意网站中打开安全网站)
注意
Cookie不会再退出网站后马上消失,所以即使你已经退出安全网站后,它仍然会被保存一段时间,所以即使在退出安全网站后再访问恶意网站,依然有可能会遭受攻击。
CSRF攻击如何防御
一般来说从服务端进行防御
- Cookie Hashing(所有表单都包含同一个伪随机值):
在表单里增加Hash值(保证是本公司的网站发出的请求而不是其他的)以认证这确实是用户发送的请求。
然后在服务器端进行Hash值验证 - 验证码
每次的用户提交都需要用户在表单中填写一个图片上的随机字符串,这个方案几乎可以完全解决CSRF - One-Time Tokens(不同的表单包含一个不同的伪随机值)
在实现One-Time Tokens时,需要注意一点:就是“并行会话的兼容”。如果用户在一个站点上同时打开了两个不同的表单,CSRF保护措施不应该影响到他对任何表单的提交。考虑一下如果每次表单被装入站点生成一个伪随机值来覆盖以前的伪随机值将会发生什么情况:用户只能成功地提交他最后打开的表单,因为所有其他的表单都含有非法的伪随机值。必须小心操作以确保CSRF保护措施不会影响选项卡式的浏览或者利用多个浏览器窗口浏览一个站点。
参考文献:
http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html?login=1















网友评论