現在、クライアントのサイトの 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="><iframe src=foo></iframe>">here</a>.</h2>
</body></html>
この問題の解決策は、これらのタイプのリクエストでユーザー入力をサニタイズし、実行可能なスクリプトをトリガーする可能性のある文字がヘッダーまたはページで返されないようにすることです。
まず、テスターが行った結果を取得できません。場所を含まない 200 ヘッダーしか返されず、オブジェクトの移動ページも返されません。第二に、(iis 6で)クエリ文字列を含むヘッダーを返すのを止める方法がわかりません!最後に、なぜヘッダーのコードが重要なのですか? ブラウザーは実際には http ヘッダーからコードを実行しないのでしょうか?