什么是CSRF
跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。
简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求是发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
CSRF原理图CSRF都能做什么?
以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账等等
造成的问题包括但不限于个人隐私泄露以及财产安全等。
小例子:
譬如小明给小红转账
登录网页运行
http://bank.com/transfer?toAccount=xiaohong&amount=999
然后恶意攻击者小黑可以在另一个网站上放置如下代码
<img src="http://bank.com/transfer?toAccount=black&amount=999" />
如果小明刚刚转账完 登录信息尚未过期,那么他就会在不知情的情况下损失999元。
这种恶意的网址可以有很多种形式,藏身于网页中的许多地方。此外,攻击者也不需要控制放置恶意网址的网站。例如他可以将这种地址藏在论坛,博客等任何用户生成内容的网站中。这意味着如果服务端没有合适的防御措施的话,用户即使访问熟悉的可信网站也有受攻击的危险。
可以采取的防御措施
令牌同步模式:每次请求都会独立发布一个令牌 用户的每次提交必须带着令牌 不过这种方式也很容被破解。
检查Referer字段:HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪个地址。通常来说,Referer字段应和请求的地址位于同一域名下。但是虽然http协议对此字段的内容有明确的规定,但并无法保证来访的浏览器的具体实现,亦无法保证浏览器没有安全漏洞影响到此字段。并且也存在攻击者攻击某些浏览器,篡改其Referer字段的可能。
添加校验token:当用户与服务端进行交互的时候,传递一个加密串到服务端,服务端来检测这个字符串是否是合法的,如果不合法就有可能是黑客伪造用户信息进行请求的。传递到服务端以后,服务端重新生成一遍,如果一致就是合法的,否则就是不合法的。
网友评论