服务器响应时,为什么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
... lo,当我的本地服务器响应时,它会被重写:
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。
任何帮助,非常感谢!
亲切的问候,
詹姆士
没有找到相关结果
已邀请:
3 个回复
细瑞
寒健
掀辟髓观粟
在这种情况下,浏览器保留URL不变的原因是服务器返回HTTP 404响应,表示找不到资源。在这种情况下,Firefox不会更改URL。如果您改用提示Google给出200 OK响应的URL,例如以下内容...
...您会发现,当服务器以更改的URL响应时,FireFox将更改URL。 自己尝试。实际上,如果您将更改的URL剪切并粘贴到电子邮件中,则会发现字符保持不变。 除了HTTP响应代码外,这与服务器实际响应的内容无关。如果服务器响应“ 404 Not found”,则FireFox选择保留地址栏中的URL。如果服务器以\'200 OK \'响应,则FireFox选择更改URL,以使某些字符转义,以使URL更具可读性。如果找不到资源,则逻辑是我认为这样做没有意义。 我假设您使用的是Firefox。实际上,浏览器对这种情况的处理有所不同。我已经尝试在多个浏览器中键入此URL(第二个URL)。我总结了结果: Google Chrome与Firefox相同。引号和尖括号显示为普通字符,不转义。 Internet Explorer使URL保持不变,但显示有关XSS的消息警告,并且不会显示Google页面。 Opera在地址栏中仅显示\'www.google.com \'。 Safari保持URL不变。 我希望这可以解决问题。要使自己相信所有这些,您可以做的一件事就是运行像Fiddler这样的HTTP调试代理。您可以看到,在每种情况下,服务器返回的内容都是相同的,这只是服务器在响应时每个浏览器如何选择更改URL的问题。 亲切的问候, 詹姆士