CSRF(Cross-Site Request Forgery)是指跨站请求伪造,也常常被称为“One Click Attack”或者“Session Riding”,通常缩写为CSRF或是XSRF。
与XSS跨站脚本攻击相比,两者攻击方式完全不同,虽然CSRF攻击不太流行,但却更加难以防范,所以被认为CSRF比XSS更具危险性,CSRF在业内具有“苏醒的巨人”的称号。
可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义进行某些非法操作。CSRF能够使用你的账户发送邮件,获取你的敏感信息,甚至盗走你的财产。
一、CSRF攻击原理
比如:
(1)你正在访问一个银行的网站,且已经登录,相当于,你已经和这个网站建立了会话;
(2)这时,你的朋友,或者网友(hacker),发来了一条链接(是这个网站转帐时请求的链接),而且与你所登录的是同一家网络银行,你可能认为这个网站是安全的,然而当你打开这个url后,你账户中的余额可能会全部丢失。
(3)因为你的浏览器正处于与此网站的会话之中,那么任何操作都是合法的,因此,就可以成功转账。
正常的转账,会发送如下请求:http://www.secbug.org/pay.jsp?user=xxser&money=1000
.
攻击者操作,则会将此url改为:http://www.secbug.org/pay.jsp?user=hack&money=10000
.
(4)然后发给你,点击后,其实是你自己亲手造成的,并不是有人破解了你的账户密码或者是银行Web服务器被入侵导致的。
以上表明两个重点:
(1)CSRF的攻击建立在浏览器与Web服务器的会话中;
(2)欺骗用户访问URL。
二、CSRF攻击场景
1. GET:
蠕虫攻击,以金字塔的形式传播,速度非常快(实际中,XSS与CSRF通常是一起出现的)。
2. POST
也会发生攻击,只不过比get方式多了点代码。
3. 浏览器Cookie机制
访问同域下的页面时,无论时Session Cookie还是本地Cookie,Cookie都将被一起发送。
访问不同域名下的页面时,各个浏览器的Cookie机制不同,有的则不会发送Cookie,就不会造成CSRF攻击;有的则会发送,则攻击就会成功。
三、预防跨站请求伪造
在预防CSRF攻击时,不像其他漏洞那样复杂,你只需要在关键部分增加一些小操作就可以防御CSRF攻击。
1. 二次确认
在调用某些功能时进行二次验证,如:删除用户时,产生一个对话框,提示“确定删除用户吗?”。转账操作时,要求用户输入二次密码。
2. Token认证
Token即标志、记号的意思,在IT领域也叫做令牌。
CSRF攻击成功的两个要素:
(1)攻击者可得知URL的所有参数项,并了解其含义;
(2)诱导用户访问构造好的POC(意思应该是伪造的请求)。
步骤:即使用验证码验证,Token是一个不需要输入的验证码。
- 每当用户登录后会随机生成一段字符串,并且存储在session中。
- 在敏感操作中加入隐藏标签,value即为Session中保存的字符串,如:
<input type="hiden" name="token" value="3a8d9fx0s8v8" />
,表单提交的时候就会带上token进行验证。 - 如果为GET/POST请求,考虑使用在Cookie中存储Token,只要向服务器进行请求,那么一般都会带入Cookie,即可进行后面的验证。
- 提交请求后,服务器端取出Session中的字符串与提交的Token对比,如果一致,则认为是正常请求,否则可能是CSRF攻击。
- 更新Token值。
有人认为:CSRF其实就是XSS攻击的一种“缩小版”。
所以在防范CSRF时,首先要确定网站是否存在XSS漏洞,如果网站存在XSS漏洞,那么防范CSRF是没有任何意义的。
网友评论