首页
论坛
专栏
课程

分享:
对于CSRF的防御通常有以下三种方法: 1、使用验证码 &emsp;&emsp;csrf攻击一般都是在受害者不知情的情况下进行发起的,使用验证码可以有效的防止攻击,但是每次请求都要输入验证码会影响用户体验,所以通常只在用户登陆注册,还有一些特定业务场景下使用,比如银行转账。如何使用验证码要根据业务和场景来决定。 2、验证http Referer &emsp;&emsp;http头中的referer字段记录了请求来源地址,比如从 http://www.test.com 点击链接到 http://m.test.com 之后,那么referer就是 http://www.test.com 这个地址。攻击者在对受害者进行攻击的时候,是在攻击者自己的服务器上构建自己的恶意脚本,诱骗受害者点击,所以此时的referer值就是攻击者自己的URL地址。 通过以上可知,csrf攻击都是跨域发起的,所以在服务端针对referer字段验证是否属于安全可靠的域名,可在一定程度上有效防御此类攻击。 但是此类方法并非万无一失,在低版本存在漏洞的浏览器中,黑客可以篡改referer值。另一种情况是csrf结合xss进行攻击,此时就不需要跨域发起,也可以绕过referer验证。 3、使用token &emsp;&emsp;在说token如何防御csrf攻击之前,我们先了解下token的工作原理。 当用户第一次进行登陆的时候,客户端会通过用户名和密码去请求服务器登陆,服务端在收到请求后会验证客户端传来的用户名和密码,如果验证通过,服务器就会签发一个token发给客户端,并且将token放到session中,客户端收到token后存储到本地,以后客户端只要每次请求服务器就要带上token,经过服务器验证通过后才会返回响应数据,否则报错。 &emsp;&emsp;csrf攻击成功的前提条件是攻击者可以完全伪造出受害者的所有请求,而且请求中的验证信息都在cookie中,黑客只要使用用户的cookie通过安全验证就可以完成攻击。了解了这些之后,想要防止csrf攻击,就要在http请求中放置黑客不可以伪造的信息,而且该信息不可以存在于cookie中,否则就无效。而token令牌最大的特点就是随机性,不可预测,并且不存在于cookie当中。 &emsp;&emsp;对于GET请求,请求参数直接在URL当中,这样token的形式就为 http://xxx.com?csrftoken=tokenvalue ,但是这种方式把请求参数都放在URL中,会导致在referer中泄露,不仅如此,设想另一种场景,一个在内网系统的员工,从内部敏感系统在点击对外部提供服务的网站链接,此时就会把内网敏感信息通过referer泄漏出去。而对于POST请求,token是以隐藏表单存在,`<input type=”hidden” name=”csrftoken” value=”tokenvalue”/>`。最后注意一点,如果在同域下存在xss漏洞,那么这种使用token的防御将形同虚设。

上一篇 :
下一篇 :
讨论 (1)
沪ICP备16048531号-1
沪公网安备 31011502006611号