一、概述
跨站请求伪造(Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。
——摘自《百度百科》
二、CSRF的流程及限制
1.攻击者保持与A服务器的会话。
(限制:对安全性要求较高的网站,session有效期较短。)
2.攻击者能够得到请求报文的信息
(限制:多数网站都通过HTTPS加密传输,无法通过抓包获取,只能通过提前注入木马等方式获取。)
3.攻击者能篡改请求报文的信息。
4.攻击者能把篡改之后的报文发给被攻击者。
(限制:攻击者需要通过有效的方式发送给被攻击者,比如通过被攻击者访问的留言板或论坛所暴露的XSS漏洞,或是能够拿到被攻击者的联系方式,进行发送。)
5.被攻击者会发送这个报文到服务器。
(限制:被攻击者没有安全意识,会点击陌生链接。)
三、防御手段
1.对referer进行校验。
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。但是referer容易被绕过。
2.添加token令牌。
token指的是用户登录时,服务器根据用户名和登录时间状态给当前登录的用户分配一个校验值,当用户的每一次操作时,服务器都会对用户操作带有的这个token进行对比,只要比对通过才返回正确响应,如果没有通过那么就拒绝该请求。