我目前正在尝试通过我客户的一个站点的 PCI 合规性,但测试公司正在标记一个我不理解的漏洞!
测试公司的(站点已删除)详细信息如下:
这里的问题是通常与电子商务应用程序相关的跨站点脚本漏洞。其中一项测试在您的站点 URL 末尾的 GET 请求中附加了一个无害的脚本。它被标记为跨站点脚本漏洞,因为由用户(我们的扫描仪)输入的相同脚本是由服务器返回的,但未在标头中进行清理。在这种情况下,脚本在标头中返回,因此我们的扫描程序标记了该漏洞。
这是我从终端运行的重复此测试:
GET /?osCsid=%22%3E%3Ciframe%20src=foo%3E%3C/iframe%3E HTTP/1.0 主机:(已删除)
HTTP/1.1 302 Found
Connection: close
Date: Tue, 11 Jan 2011 23:33:19 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Location: http://www.(removed).co.uk/index.aspx?osCsid="><iframe src=foo></iframe>
Set-Cookie: ASP.NET_SessionId=bc3wq445qgovuk45ox5qdh55; path=/; HttpOnly
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 203
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="http://www.(removed).co.uk/index.aspx?osCsid="><iframe src=foo></iframe>">here</a>.</h2>
</body></html>
此问题的解决方案是清理用户对这些类型的请求的输入,确保不会在标题或页面上返回可能触发可执行脚本的字符。
首先,我无法得到测试人员所做的结果,它只返回一个不包含位置的 200 标头,也不会返回对象移动页面。其次,我不确定如何(在 iis 6 上)阻止它返回包含查询字符串的标题!最后,为什么标头中的代码很重要,浏览器肯定不会实际执行来自 http 标头的代码?