Webセキュリティの小部屋

Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから
公開日:2013年3月16日
最終更新日:2013年12月26日

クロスサイト・スクリプティング(XSS)対策(ASP.NET,C#,VB.NET編)

クロスサイト・スクリプティング(以下、XSS)の対策は以下の記事を参照してください。

これを ASP.NET で実現すると以下のようになります。

要求検証

ASP.NET では、XSS などの危険な文字列が入力されると要求検証により、以下のようなエラー画面を表示して XSS などの攻撃を防ぎます。

pic01

要求検証は基本的にデフォルトのまま有効にしておくべきです。この記事でも、要求検証を有効にしている前提で説明をします。

しかし、要求検証のために入力できない文字があるケースでは、要求検証を無効にする必要があります。その場合は、要求検証を無効にすることが可能です。要求検証の無効は、全体に対してでなく、特定のページに対してのみ行うようにします。なお、ASP.NET 4 以降とそれ以前とでは要求検証を無効にする方法が異なります。詳しくは以下のサイトの記事を参照してください。

根本的対策

■1.HTTP レスポンスヘッダーに文字コードを指定する

ASP.NET のデフォルトでレスポンスヘッダーの Content-Type は UTF-8 になっています。ですので、何も設定しない状態だと Content-Type は以下のように設定されます。

デフォルトで問題ないのですが、明示的に指定したい場合は、web.config で以下のように設定します。

これを Shift-jis で指定する場合は以下のように設定します。

するとレスポンスヘッダーの Content-Type は以下のようになります。

■2.HTML 要素の属性は""(ダブルクオーテーション)で囲む
これはそのままですが、HTML の属性は''(シングルクォーテーション)ではなく、""(ダブルクオーテーション)で囲むようにしてください。ASP.NET のコントロールであれば、デフォルトで""(ダブルクオーテーション)になっています。

■3.出力する全ての要素に対してエスケープ処理を行う
ASP.NET でエスケープ処理を行う方法は、ASP.NET 4以降とそれ以前で方法が異なります。

・ASP.NET 4 より以前
HttpUtility を使用して手動でエスケープを行います。

・ASP.NET 4 以降
<%: %> コードナゲットを使用すればデフォルトでエスケープされます。

■4.URL は「http://」か「https://」で始まるもののみ出力する
URL 判定の実装例は以下のようになります。

・C#

・VB.NET

■5.<script></script> 要素の内容を動的に生成しない
これはそのままですね。

保険的対策

■1.入力値のチェックを行う
XSS で危険な文字である、&<>"'が文字列に含まれているか正規表現でチェックする実装例です。

・C#

・VB.NET

■2.Cookie に HttpOnly 属性を付与する
Cookie に HttpOnly 属性を付与するには、以下のように記述します。

・C#

・VB.NET

なお、ASP.NET のセッション ID には、ASP.NET 2.0 から HttpOnly 属性が付与されるようになりました。詳しくは、以下の記事を参照してください。

■3.Trace メソッドを無効化する
IIS7.5 では Trace メソッドを実行すると、デフォルトでエラーが発生するようになっています。

・HTTP リクエストヘッダー

・HTTP レスポンスヘッダー


スポンサーリンク




カテゴリー:Webアプリケーションセキュリティ

Twitter でも、いろんな情報を発信しています。



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA