4

次の問題により、今四半期は 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 を読みやすくするために自動的に再フォーマットするためです。私はそれについて私ができることは何もないと彼らに言いました。ただし、公平を期すために、次の 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 を読みやすくするために自動的に変更するという私の信念を裏付けるものです。Safari は、IE と同様に、URL だけを残します。

手がかりを得るために、Google の応答を確認します。応答時に URL に干渉しないようにブラウザに指示する HTTP ディレクティブはありますか。

どんな助けでも非常に感謝しています!

敬具、

ジェームズ

4

3 に答える 3

1

文字がデコードされて表示されるだけで、実際には変更されていないことがわかる前に、Firefox のアドレス バーで、何が起こったのかを調べるテストをセットアップしました。

これは、次のデモにつながります: 「魔法の Firefox アドレス バー デコーダー」では、アドレス バーにデコードされて表示される文字と、スクリプトによってアドレス バーから読み取られる文字を示します (および一覧表示します) 。異なるブラウザーでページを実行すると、違いが示されます。

Firefox が最も多く変更され、Chrome は数文字しか変更されず、IE と Safari は何も変更されません。Firefox によってデコードされる文字の選択は、encodeUriComponent によってエンコードされる文字の選択とは無関係のようです。これが誰にも役立つことを願っています。

于 2013-03-26T23:39:22.430 に答える
1

URL エンコード シーケンスが有効でないため、Google URL バーの結果は変わりません (「%3」は有効なエンコード シーケンスではありません - 2 つの 16 進数が必要です)。最初のリンクと同じ 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、オランダ)。

何をエスケープし、何をエスケープしないかについての興味深い議論については、eg. https://bugzilla.mozilla.org/show_bug.cgi?id=425480 .

于 2011-06-18T12:16:43.920 に答える
0

私はこの問題についていくつかの進歩を遂げました。次の点を考慮してください。

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

この場合、ブラウザーが URL を変更しないままにする理由は、サーバーが HTTP 404 応答を返し、リソースが見つからないことを示すためです。このような場合、Firefox は URL を変更しません。代わりに、次のような Google からの 200 OK 応答を促す URL を試すと...

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

...サーバーが変更された URL で応答すると、FireFox が URL を変更することがわかります。

自分で試してみてください。実際、変更された URL をメールにコピー アンド ペーストすると、文字が変更されていないことがわかります。

これは、HTTP 応答コードを除いて、サーバーが実際に応答するものとは何の関係もありません。サーバーが「404 Not found」で応答した場合、FireFox はアドレス バーの URL を変更しないままにすることを選択します。サーバーが「200 OK」で応答すると、FireFox は URL を変更することを選択し、おそらく URL を読みやすくするために一部の文字のエスケープを解除します。リソースが見つからない場合、論理的には、これを行う意味がないと思います。

Firefox を使用していると仮定します。実際、ブラウザはこのケースを別の方法で扱います。この URL (2 番目の URL) をいくつかのブラウザーに入力してみました。結果をまとめました:

Google Chrome は Firefox と同じです。引用符と山括弧は、エスケープされていない通常の文字として表示されます。

Internet Explorer URL は変更されませんが、XSS に関する警告メッセージが表示され、Google ページは表示されません。

Opera アドレス バーに「www.google.com」だけが表示されます。

Safari URL は変更されません。

これで問題が解決することを願っています。これらすべてを納得させるためにできることの 1 つは、Fiddler のような HTTP デバッグ プロキシを実行することです。いずれの場合も、サーバーが返すものは同じであることがわかります。これは、サーバーが応答したときに各ブラウザーが URL をどのように変更するかの問題です。

敬具、

ジェームズ

于 2011-06-20T09:48:41.357 に答える