2011-06-18 23 views
3

由於以下問題,本季難以達到PCI-DSS合規性。爲什麼當服務器響應時,FireFox和某些其他瀏覽器會更改地址欄中的URL

當你鍵入以下內容到瀏覽器...

http://www.mygarble.com/main/Community/Chat?command=CHAT_MESSAGE&displayname=%22%3E%3Cscript%3Ealert%28123%29%3C%2Fscript%3E%22 

...它響應和,因此,出於某種原因,我不能確定,在browswer地址欄中的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 

...當谷歌的服務器響應,瀏覽器不會更改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

我已經通過提琴手運行這一點,可以看到沒有任何不幸,我已經關掉了重寫引擎。我正在運行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。

任何幫助非常感謝!

親切的問候,

詹姆斯

+1

這與pci-dss有什麼關係?我不明白。 – Oded

回答

1

在谷歌URL欄的結果不會改變,因爲URL編碼序列是無效的(「%3」不是一個有效的編碼序列 - 應該有兩個十六進制數字)。

http://www.google.com/%22%3E%3Cscript%3Ealert%28123%29%3C%2Fscript%3E%22

它也被替換在地址欄與轉義字符(在Firefox 4.0.1,Mac OS X的雪:如果你在第一次鏈接到谷歌域,從而追加相同的URI部分豹,荷蘭)

對於一些有趣的討論關於什麼逃生什麼不能逃脫,見例如。 https://bugzilla.mozilla.org/show_bug.cgi?id=425480

+1

感謝您的反饋。我想我自己已經回答了這個問題。請參閱下面的電子郵件我剛剛發送到安全指標。 –

+0

哦,看來我必須等幾個小時,因爲我的信譽不夠好! –

+0

下面?我沒有看到電子郵件,可悲的是... – Gijs

0

我在這個問題上取得了一些進展。考慮以下幾點:

http://www.google.com/%22%%203E%3Cscript%3Ealert%28123%29%3C%2Fscript%3%20E%22 

瀏覽器離開網址在這種情況下保持不變的原因是,服務器返回一個HTTP 404響應,表示資源不能被發現。在這些情況下,Firefox不會更改URL。如果您而是試圖提示來自谷歌,如下面的200 OK響應網址...

http://www.google.com/?displayname=%22%3E%3Cscript%3Ealert%28123%29%3C%2Fscript%3E%22 

......你會發現,當服務器有改變URL迴應Firefox會更改URL。

親自試一試。事實上,如果您將更改後的網址剪切並粘貼到電子郵件中,您會發現這些字符保持不變。

除了HTTP響應代碼之外,這與服務器的行爲無關。如果服務器迴應'404未找到',FireFox會選擇不改變地址欄中的URL。如果服務器響應'200 OK',FireFox會選擇更改URL,以避免使用某些字符,這可能是爲了使URL更易讀。如果資源找不到,邏輯是我想這樣做沒有意義。

我假設你使用Firefox。事實上,瀏覽器對待這種情況的方式不同。我試着將這個URL(第二個)輸入到幾個瀏覽器中。我已經總結了結果:

Google Chrome與Firefox相同。引號和角度大括號顯示爲正常字符,未轉義。

Internet Explorer保留URL不變,但會顯示關於XSS的消息警告,並且不會顯示Google頁面。

Opera在地址欄中顯示'www.google.com'。

Safari保持URL不變。

我希望這可以解決問題。你可以做的一件事就是讓所有這些都能說服你自己運行一個HTTP調試代理,如Fiddler。您可以看到,在每種情況下,服務器返回的內容都是相同的,這僅僅是每個瀏覽器在服務器響應時如何選擇更改URL的問題。

親切的問候,

詹姆斯

1

之前,我發現該字符只顯示的解碼,但沒有真正改變,在Firefox瀏覽器地址欄,我成立了一個測試,以找出發生了什麼。

這導致了這個演示:'The magic Firefox address bar decoder'演示(和列表),這些顯示的字符在地址欄中解碼,什麼是通過腳本從地址欄讀取。在不同的瀏覽器中運行頁面顯示了不同之處。

Firefox變化最大,Chrome變化只有幾個字符,IE和Safari不改變任何東西。 Firefox解碼字符的選擇與encodeUriComponent編碼的字符的選擇無關。希望這可以幫助任何人。

相關問題