【信息安全服务】深入学习CSRF-防御篇

前一篇博客传送门:

【信息安全服务】深入学习CSRF-攻击篇

 


【如何防御CSRF攻击 】

 

【验证码检验】

验证作为防御CSRF的简洁且有效的方式,也是应用比较广泛的防御手段之一。加入验证码,就是强制用户进行应用交互,这样可以有效遏制CSRF攻击。但是验证码只是一种辅助手段,不能最为最主要的解决方案。

【Referer Check】

Referer Check 常被用作检查请求是否来自合法“源”。目前主流的互联网应用页面之间都有特定的逻辑关系,这样每个请求的Referer都有特定的规律。但是Referer Check同样存在缺陷,因为服务器不能保证在任何情况下都能获取到Referer.此外因为考虑安全性原因,限制了Referer的发送,这样就会造成误判。另外从HTTPS跳转到HTTP浏览器也不会发送Referer。这样就不能从根本上解决CSRF攻击。

【Anti CSRF Token】

在前一篇博客中已经介绍了CSRF的本质,即重要操作的参数都是可以被攻击者猜测到的。而Token的强大就在于随机性。

原理比较简单,例如下面这个删除操作URL:

http://host/path/delete?username=abc&item=123

将username参数改成哈希值:

http://host/path/delete?username=md5(salt+abc)&item=123

 经过处理后,攻击者就很难发起CSRF攻击了。对于服务器来说,则可以在Session或者Cookie中获取“username=abc”的值,再结合salt对整个请求进行验证,正常请求就会被认为是合法的。

但是随机性处理将会影响用户交互性,数据分析等操作。所以安全界提出一种方案,即Anti CSRF Token。在上面的URL中增加一个Token参数。Token的值是随机不可预测的:

http://host/path/delete?username=abc&item=123&token=[random(seed)]

在实际的应用场景中,Token常被放在用户的Session和浏览器的Cookie中。由于Token的存在,攻击者就无法构造一个完整的URL实施CSRF攻击了。

Token需要同时放置在表单和Session中。在提交请求时,服务器只需要验证表单中的Token与用户Session(或Cookie)中的Token是否一致,如果一致,就是合法的请求,如果不一致或者其中一个空,就意味着可能遭到CSRF攻击,请求拒绝。

【使用Token防御的注意事项】

在实际应用中,要充分考虑多页面共存的情况,可以通过生成多个有效Token的方式来解决这一情况。

另外Token的安全性也要引起注意,尽量将Token放置在表单中,以及将敏感操作有GET改为POST,以form表单的形式提交,可以防止Token泄露。

©️2020 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值