vlambda博客
学习文章列表

CSRF攻击原理和防御




1

CSRF攻击简介


跨站请求伪造(Cross-site request forgery),也被称为one-click attack或者session riding,通常缩写为CSRF或者XSRF,是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。 跟跨网站脚本(XSS)相比,XSS利用的是用户对指定网站的信任,CSRF利用的是网站对用户网页浏览器的信任。

2

CSRF攻击原理


CSRF攻击是通过让一个已授权的用户的浏览器向应用发起一个恶意请求(用户尚不知情的情况)。 只要用户的身份已被验证过且实际的请求已经通过用户的浏览器发送到目标应用,应用无法知道情况的来源是否是一个有效的交易或者这个用户是在知情的情况下点击这个链接。 通过CSRF攻击,攻击者可以让受害者执行一些他们不知情的操作,比如购买操作,改变账户信息或者其它目标攻击应用提供的服务。

3

CSRF攻击防御


1、尽量使用post,限制get
get接口太容易被拿来做CSRF攻击,接口最好限制为post使用,get则无效,降低攻击风险。当然post并不是万无一失,攻击者只要构造一个form就可以,但需要在第三方页面做,这样就增加暴露的可能性。

3、检查Referer字段
CSRF伪造的请求与用户正常的请求相比最大的区别就是请求头中的Referer值不同,我们可以根据这点来防御CSRF。在接收请求的服务端判断请求的Referer头是否为正常的发送请求的页面,如果不是,则进行拦截。

4、使用验证码
验证码强制用户必须与应用进行交互,才能完成最终请求。在通常情况下,验证码能很好遏制CSRF攻击。但是出于用户体验考虑,网站不能给所有的操作都加上验证码。因此验证码只能作为一种辅助手段,不能作为主要解决方案。