网络空间安全实验教程
上QQ阅读APP看书,第一时间看更新

2.2 Testfire网站有XSS攻击风险

缺陷标题:testfire首页>搜索框存在XSS攻击风险。

测试平台与浏览器:Windows 10+IE11浏览器。

测试步骤

1)打开国外网站testfire主页:http://demo.testfire.net。

2)在搜索框输入:<script>alert("test")</script>。

3)单击Go按钮进行搜索。

期望结果:返回正常,无弹出对话框。

实际结果:弹出XSS攻击成功对话框“test”信息,如图2-1所示。

图2-1 弹出XSS攻击成功对话框

[攻击分析]:

XSS是一种经常出现在Web应用中的计算机安全漏洞,它允许恶意Web用户将代码植入到提供给其他用户使用的页面中。这些代码包括HTML代码和客户端脚本。

在2007年OWASP所统计的所有安全威胁中,跨站脚本攻击占到了22%,高居所有Web威胁之首。2013年,XSS攻击排名第三。

用户在浏览网站、使用即时通信软件,甚至在阅读电子邮件时,通常会单击其中的链接。攻击者通过在链接中插入恶意代码,就能够盗取用户信息。攻击者通常会用十六进制(或其他编码方式)将链接编码,以免用户怀疑它的合法性。网站在接收到包含恶意代码的请求之后会生成一个包含恶意代码的页面,而这个页面看起来就像是那个网站应当生成的合法页面一样。许多流行的留言本和论坛程序允许用户发表包含HTML和JavaScript的帖子。假设用户甲发表了一篇包含恶意脚本的帖子,那么用户乙在浏览这篇帖子时,恶意脚本就会被执行,并盗取用户乙的Session信息。

为了搜集用户信息,攻击者通常会在有漏洞的程序中插入JavaScript、VBScript、ActiveX或Flash以欺骗用户。一旦得手,他们可以盗取用户账户,修改用户设置,盗取/污染Cookie,发布虚假广告等。每天都有大量的XSS攻击的恶意代码出现。

随着AJAX(Asynchronous JavaScript and XML,异步JavaScript和XML)技术的普遍应用,XSS的攻击危害将被放大。使用AJAX的最大优点,就是可以不用更新整个页面来维护数据,Web应用可以更迅速地响应用户请求。AJAX会处理来自Web服务器及源自第三方的丰富信息,这给XSS攻击提供了良好的机会。AJAX应用架构会泄露更多应用的细节,如函数和变量名称、函数参数及返回类型、数据类型及有效范围等。AJAX应用架构还有着较传统架构更多的应用输入,这就增加了可被攻击的点。

从网站开发者角度,如何防护XSS攻击?

来自应用安全国际组织OWASP的建议,对XSS最佳的防护应该结合以下两种方法:验证所有输入数据,有效检测攻击;对所有输出数据进行适当的编码,以防止任何已成功注入的脚本在浏览器端运行。具体如下:

输入验证:某个数据被接受为可被显示或存储之前,使用标准输入验证机制,验证所有输入数据的长度、类型、语法以及业务规则。

输出编码:数据输出前,确保用户提交的数据已被正确进行entity编码,建议对所有字符进行编码,而不仅局限于某个子集。

明确指定输出的编码方式:不要允许攻击者为你的用户选择编码方式(如ISO8859-1或UTF8)。

注意黑名单验证方式的局限性:仅仅查找或替换一些字符(如"<" ">"或类似"script"的关键字),很容易被XSS变种攻击绕过验证机制。

警惕规范化错误:验证输入之前,必须进行解码及规范化,以符合应用程序当前的内部表示方法。请确定应用程序对同一输入不做两次解码。

从网站用户角度,如何防护XSS攻击?

当你打开一封Email或附件、浏览论坛帖子时,可能恶意脚本会自动执行,因此,在做这些操作时一定要特别谨慎。建议在浏览器设置中关闭JavaScript。如果使用IE浏览器,将安全级别设置到“高”。