背地里搞你的攻击:CSRF

Posted SimpleMain

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了背地里搞你的攻击:CSRF相关的知识,希望对你有一定的参考价值。

最近老王聊了好几种攻击,今天咱继续聊攻击。聊这个话题的目的,不是为了去攻击别人,而是丰富咱自己的知识,防止被别人搞。

 

好了,今天聊的这个攻击也是大家耳熟能详的,叫做跨站请求伪造,英文名叫Cross-Site Request Forgery。这个攻击虽然大家都听说过,但是却是防不胜防。你即使今天防住了,说不定哪天上一个新功能,就又出现了。

 

1、原理

 

说这么多,我们还是先来看看这个攻击的原理,知道里原理,自然就知道怎么去防范他。所谓的跨站,自然要有至少两个网站;所谓请求伪造,自然要有另外的用户被利用。所以,这里的角色一共有四个。攻击者 + 被利用的用户 + 网站A + 网站B

 

A、第一步:埋下祸根

 



这里有一个网站A,他提供一个功能就是发贴,而且贴子里面能够带图片链接,或者点击链接。注意:这里一定是发链接,而不是本地上传图片。

 

与此同时,网站B有一个提交的接口,但是却没有遵循标准HTTPGetPost要求,采用了Get方式来提交。比方说,这个接口叫做:B.com/post?content=xxx

 

 

做完这一步,攻击者就播完种子了,等待鱼儿上钩。

 

B、第二步:不知不觉就被搞了

 



 

如果B网站不需要登录,或者用户恰好登录过B这个网站,已经有登录的token放到cookie里了。这个时候,悲剧就会发生……

 

a、如果网站B是一个类似银行这样的财务网站,而post又是一个类似转账这样的接口,那对于用户来讲,就……

 

b、如果网站B是一个论坛,而网站A又是一个流量超大的网站,那对于网站B来讲,就可能瞬间被挤垮……

 

c、如果网站B是一个投票活动网站,那这个投票就被人轻松的操纵了……

 

2、防范

 

好了,刚刚我们讲了整个的一个原理,那接下来,我们就一步步的讲讲如何来防范这样的攻击。

 

A、如果你是网站A:请不要给攻击者留下可乘之机

 

虽说网站A本身没有恶意,但是他却充当了攻击助手的角色。所以,如果你是网站A的话,你需要做的是,堵住漏洞之源。

 

 

b、如果非要允许贴图片链接,也要验证图片的有效性,并拷贝到本地服务器。比如新浪微博就支持第三方app提交图片链接。但是,他一定会把第三方的图片拷贝到他的服务器上。以保证图片本身是OK的。不然,如果第三方把图片的内容一换,给个302跳转,我们又SB了;

 

 

B、如果你是网站B:请堵住所有的开口

 

如果你是网站B,你需要对你所有的提交接口做好封堵工作,要把防御式编程的思想时时谨记。

 

a、遵循HTTP协议的规定,Get请求只做资源获取,千万不要做提交。提交统一用Post,参数从post变量里面获取;

 

b、有些网站A可能还有XSS漏洞(下次具体聊),所以Post也不绝对解决问题,所以还要做cookie和提交加密验证。

 

比如:我对所有的登录用户提供一个tokencookie,同时,对于提交前的请求,把一个加密的token值(如: md5(token))放到提交表单中,用<input type="hidden" name="sign"value="sign_token">来隐藏。当用户提交请求过来的时候,如果没有这个sign_token,或者这个值和cookie里的token对不上,则直接拒绝;

 

c、关键提交增加验证码。对于注册、转账这些关键提交,最好加上验证码。这样既能防止机器人,也能防止恶意的这种CSRF攻击;

 

 

e、关键接口,需要增加用户登录超时。对于转账等重要操作的接口,需要增加登录超时设置。比如1小时无操作,就应该让用户的登录无效,避免用户被第三方利用。

 

好了,用了以上手段,至少可以防止主99.9%的这些恶意攻击(还有0.1%就需要实时分析了)。

 

C、如果你是普通用户:请关闭你所有该关闭的门

 

对于普通用户的我们,为了防止财产流失,我们应该有最基本的安全意识。

 

a、对于重要网站,最好及时登出。对于像银行、保险这样涉及到钱的网站,最好操作完以后,及时点击那个“注销”或者“退出”按钮。千万不要就点击浏览器那个“X”(好多小白用户以为关闭了浏览器就退出了,这是及其不对的认识,因为好多cookie都不是会话级的);

 

b、最好少访问那种不该访问的网站(码工们应该都懂~)。即使要访问,也最好使用不带cookie的模式,避免被人搞了;

 

c、重要网站的密码,最好定期更换,避免一个被破,全部都被破了。

 

好了,网络安全这个话题,说起来原理都不复杂,往往都是协议或者是实现者的bug造成的。所以,对于码工们来讲,不管你是作为用户,还是网站开发者,还是……,一定要注!意!安!全!

 

 


以上是关于背地里搞你的攻击:CSRF的主要内容,如果未能解决你的问题,请参考以下文章

什么是csrf攻击?

CSRF 攻击(跨域攻击)

什么是CSRF攻击?

csrf攻击

CSRF攻击与防御,值得一看

CSRF攻击详解