CS.XSS.REFLECT
クロスサイトスクリプティングの反映型脆弱性
CS.XSS.REFLECT チェッカーは、入力が HTTP リクエストからデータによって直接提供され、その後ユーザーに反映/表示され、Web ブラウザーによって実行される、そうしたコードのインスタンスにフラグを立てます。
脆弱性とリスク
クロスサイトスクリプティング (XSS) 攻撃は、ユーザーが制御可能な入力を、Web ページとして使用される出力に配置して他のユーザーに供給される前に、ソフトウェアがそれを中立化しないか、間違って中立化するようなタイプの攻撃です。
XSS 脆弱性は、次の場合に発生します。
- 信頼できないデータが、通常では Web リクエストから Web アプリケーションに入力されます。
- Web アプリケーションは、この信頼できないデータを含む Web ページを動的に生成します。
- アプリケーションは、ページの生成中に、JavaScript、HTML タグ、HTML 属性、マウスイベント、Flash、ActiveX などの Web ブラウザーによって実行可能なコンテンツを、データに含めないようにはしません。
- 被害者は、Web ブラウザーを使用することで、信頼できないデータを使用して挿入された悪意のあるスクリプトを含む、生成された Web ページを訪問します。
- スクリプトは Web サーバーによって送信された Web ページからのものであるため、被害者の Web ブラウザーは、Web サーバーのドメインのコンテキストで悪意のあるスクリプトを実行します。
- これは、あるドメイン内のスクリプトが、別のドメイン内のリソースにアクセスできたり、コードを実行できたりしてはならないことを宣言する、Web ブラウザーの同一生成元ポリシーの意図に事実上違反しています。
XSS には主に次の 3 つの種類があります。
- タイプ 1: 反映型 XSS (または非持続型)
- タイプ 2: 保存型 XSS (または持続型)
- タイプ 0: DOM 基準の XSS
サーバーは、HTTP リクエストからデータを直接読み取り、それを HTTP レスポンスに反映します。反映型 XSS の悪用は、攻撃者が被害者に危険なコンテンツを脆弱な Web アプリケーションに供給させ、その後被害者に反映され、Web ブラウザーによって実行される場合に発生します。悪意のあるコンテンツを配信するための最も一般的なメカニズムは、公的に掲示されるか被害者に電子メールが直接送信される URL に、パラメーターとしてそれを含めることです。この方法で構築された URL は、多くのフィッシングスキームのコアを構成します。これにより、攻撃者は被害者を誘導して脆弱なサイトを参照する URL を訪問させるようにします。サイトが攻撃者のコンテンツを被害者に反映した後に、コンテンツは被害者のブラウザーによって実行されます。
軽減と防止
XSS 攻撃を防ぐには、Web ページとして使用される出力にデータを配置する前に、ユーザーが制御可能な入力をすべて中立化します。
脆弱コード例
protected void Page_Load(object sender, EventArgs e)
{
string reqStr = Request.QueryString["id"];
MyLabel.Text = "From get string: " + reqStr; // CS.XSS.REFLECT
}
この例では、Klocwork は 4 行目で欠陥を報告しており、次のことを示しています。「3 行目で未検証の XSS 文字列 'reqStr' が 'get_QueryString()' から受け取られます。これは、4 行目で 'get_Text()' の呼び出しによって stdout に書き込まれています。これにより、クロスサイトスクリプティングの脆弱性が発生します。」
修正コード例
protected void Page_Load(object sender, EventArgs e)
{
string reqStr = Request.QueryString["id"];
MySafeLabel.Text = "From get string: " + Server.HtmlEncode( reqStr ); // no defect as Server.HtmlEncode() sanitizes the data
}
関連チェッカー
外部参考資料
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。