http – 当服务器响应时,为什么FireFox和某些其他浏览器会更改地址栏中的URL

由于以下问题,本季度我难以满足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

…当我的本地服务器响应时,它会被重写:

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产量:

http://localhost/http.mygarble.com/hello.txt?displayname=%22%3E%3Cscript%3Ealert%28123%29%3C%2Fscript%3E%22

进入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

点赞