4

現在、クライアントのサイトの 1 つで PCI コンプライアンスに合格しようとしていますが、テスト会社が私が理解できない脆弱性を指摘しています。

テスト会社からの(サイトが削除された)詳細は次のとおりです。

ここでの問題は、電子商取引アプリケーションに一般的に関連するクロスサイト スクリプティングの脆弱性です。テストの 1 つは、サイトの URL の末尾にある GET 要求に無害なスクリプトを追加しました。ユーザー (当社のスキャナー) によって入力されたこの同じスクリプトがヘッダーでサニタイズされていないサーバーによって返されたため、クロスサイト スクリプティングの脆弱性としてフラグが立てられました。この場合、スクリプトはヘッダーで返されたため、スキャナーは脆弱性にフラグを立てました。

これを複製するために端末から実行したテストは次のとおりです。

GET /?osCsid=%22%3E%3Ciframe%20src=foo%3E%3C/iframe%3E HTTP/1.0 ホスト:(削除済み)

HTTP/1.1 302 Found
Connection: close
Date: Tue, 11 Jan 2011 23:33:19 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Location: http://www.(removed).co.uk/index.aspx?osCsid="><iframe src=foo></iframe>
Set-Cookie: ASP.NET_SessionId=bc3wq445qgovuk45ox5qdh55; path=/; HttpOnly
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 203

<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="http://www.(removed).co.uk/index.aspx?osCsid=&quot;>&lt;iframe src=foo>&lt;/iframe>">here</a>.</h2>
</body></html>

この問題の解決策は、これらのタイプのリクエストでユーザー入力をサニタイズし、実行可能なスクリプトをトリガーする可能性のある文字がヘッダーまたはページで返されないようにすることです。

まず、テスターが行った結果を取得できません。場所を含まない 200 ヘッダーしか返されず、オブジェクトの移動ページも返されません。第二に、(iis 6で)クエリ文字列を含むヘッダーを返すのを止める方法がわかりません!最後に、なぜヘッダーのコードが重要なのですか? ブラウザーは実際には http ヘッダーからコードを実行しないのでしょうか?

4

2 に答える 2

2

リクエスト:GET /?osCsid=%22%3E%3Ciframe%20src=foo%3E%3C/iframe%3E HTTP/1.0 Host:(removed)

ここ<iframe src=foo></iframe>が本題です。

応答テキスト:

 <html><head><title>Object moved</title></head><body>
 <h2>Object moved to <a href="http://www.(removed).co.uk/index.aspx?osCsid=&quot;>&lt;iframe src=foo>&lt;/iframe>">here</a>.</h2>
 </body></html>

応答リンクは次のとおりです。

  http://www.(removed).co.uk/index.aspx?osCsid=&quot;>&lt;iframe src=foo>&lt;/iframe>

リクエスト文字列の内容が含まれています。

基本的に、osCsid にページを別の方法でレンダリングできるテキストが含まれているリンクを誰かが他の人に送信できます。osCsid が入力をサニタイズするか、このようなものに対してフィルター処理を行うようにする必要があります。たとえば、任意の JavaScript を読み込むことができる文字列を提供したり、ページをまったく異なるものにすることができます。


補足として、ブラウザをその存在しないページに転送しようとします。

于 2011-01-12T20:31:33.430 に答える