4

我目前正在尝试通过我客户的一个站点的 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=&quot;>&lt;iframe src=foo>&lt;/iframe>">here</a>.</h2>
</body></html>

此问题的解决方案是清理用户对这些类型的请求的输入,确保不会在标题或页面上返回可能触发可执行脚本的字符。

首先,我无法得到测试人员所做的结果,它只返回一个不包含位置的 200 标头,也不会返回对象移动页面。其次,我不确定如何(在 iis 6 上)阻止它返回包含查询字符串的标题!最后,为什么标头中的代码很重要,浏览器肯定不会实际执行来自 http 标头的代码?

4

2 回答 2

2

要求:GET /?osCsid=%22%3E%3Ciframe%20src=foo%3E%3C/iframe%3E HTTP/1.0 Host:(removed)

<iframe src=foo></iframe>是这里的问题。

回复文字:

 <html><head><title>Object moved</title></head><body>
 <h2>Object moved to <a href="http://www.(removed).co.uk/index.aspx?osCsid=&quot;>&lt;iframe src=foo>&lt;/iframe>">here</a>.</h2>
 </body></html>

回复链接为:

  http://www.(removed).co.uk/index.aspx?osCsid=&quot;>&lt;iframe src=foo>&lt;/iframe>

其中包含来自请求字符串的内容。

基本上,某人可以向其他人发送一个链接,其中您的 osCsid 包含允许以不同方式呈现页面的文本。您需要确保 osCsid 对输入或过滤器进行过滤以防止可能出现此类情况。例如,我可以提供一个字符串,让我可以加载任何我想要的 javascript,或者使页面呈现完全不同。


附带说明一下,它会尝试将您的浏览器转发到该不存在的页面。

于 2011-01-12T20:31:33.430 回答
0

事实证明,对于 https 访问的任何页面,我都有一个 Response.redirect ,这些页面不需要安全,这会将位置作为重定向的一部分返回。将其更改为:

Response.Status = "301 Moved Permanently";
Response.AddHeader("Location", Request.Url.AbsoluteUri.Replace("https:", "http:"));
Response.End();

修复了问题

于 2011-07-22T13:13:05.400 回答