由于以下问题,本季度我难以满足PCI-DSS合规性.
当您在浏览器中键入以下内容时…
http://www.mygarble.com/main/Community/Chat?command=CHAT_MESSAGE&displayname=%22%3E%3Cscript%3Ealert%28123%29%3C%2Fscript%3E%22
…它响应,因此,由于某些原因我无法确定,浏览器地址栏中的URL更改为以下内容:
http://www.mygarble.com/main/Community/Chat?command=CHAT_MESSAGE&displayname="><script>alert(123)<%2Fscript>"
您可以看到原始URL中的某些转义字符已被未转义的字符替换.
我给出的原因是FireFox会在服务器响应时自动重新格式化地址栏中的URL,无论它如何响应,以使其更具可读性.我告诉他们我无能为力.但是,公平地说,如果您尝试以下网址,他们会反驳…
http://www.google.com/%22%%203E%3Cscript%3Ealert%28123%29%3C%2Fscript%3%20E%22
…当Google服务器响应时,浏览器不会更改URL并保持不变:
http://www.google.com/%22%%203E%3Cscript%3Ealert%28123%29%3C%2Fscript%3%20E%22
他们有一点意见.
那到底是怎么回事?我已经缩小了问题的范围,如果我只是请求一个空的文本文件,但在它之后添加一些废话查询…
http://localhost/http.mygarble.com/hello.txt?displayname=%22%3E%3Cscript%3Ealert%28123%29%3C%2Fscript%3E%22
…当我的本地服务器响应时,它会被重写:
我通过Fiddler运行它并且看不到任何不好的事情,我已经关闭了重写引擎.我正在运行Apache.
为了增加混淆,不同的浏览器会有不同的反应.打字…
http://localhost/http.mygarble.com/hello.txt?displayname=%22%3E%3Cscript%3Ealert%28123%29%3C%2Fscript%3E%22
…进入Chrome产量:
进入IE,URL保持完全相同.在Opera中,除非您单击地址栏,否则将删除查询字符串,从而使我相信浏览器会自动更改响应中的地址栏中的URL以使其更具可读性.与IE一样,Safari只保留URL.
我现在要查看Google的回复以获取线索.是否有一些HTTP指令指示浏览器在响应时不要插入URL.
任何帮助非常感谢!
亲切的问候,
詹姆士
最佳答案 谷歌URL栏结果不会改变,因为URL编码序列无效(“%3”不是有效的编码序列 – 应该有两个十六进制数字).如果您将第一个链接中的相同URI部分附加到Google域,则:
http://www.google.com/%22%3E%3Cscript%3Ealert%28123%29%3C%2Fscript%3E%22
它也会在地址栏中被未转义的字符替换(在Firefox 4.0.1,Mac OS X Snow Leopard,荷兰)
关于逃避什么和不逃避什么的一些有趣讨论,请参阅例如. https://bugzilla.mozilla.org/show_bug.cgi?id=425480