「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>脆弱性対策のポイント]]

*目次 [#u57553b5]
#contents

*概要 [#b4e11d55]
[[ASP.NET>http://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET]]でのサニタイジング方針について纏めます。

*対応方針の材料 [#i55e79ef]
一般的に、どのような対応方法があるか?

**[[ASP.NET Web Forms>http://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20Web%20Forms]] [#y3ce5729]

***要求の検証 [#la7d807a]
要求の検証という機能があり、~
クロスサイトスクリプティング(以下、XSSと略す)の~
可能性のあるリクエストを識別し例外を発生させる機能がある。

-C# - ASP.NETのValidateRequest - Qiita~
http://qiita.com/akoba/items/adc148ab753ad6960805

この機能を無効にするには以下の手順に従う。

web.configで

 <system.web>
   <httpRuntime requestValidationMode="2.0" />
 </system.web>

と指定し(Modeが4.0だと全ページで強制ONになる)、

個別のページで@Pageディレクティブを以下のように設定する必要がある。

 <@ Page validateRequest="false" %>

ただし、無効にした場合は、独自の実装で~
XSSを防止するためのサニタイジング処理を実装する必要がある。

***コントロール [#ad211bf5]
-TextBoxコントロール~
ASP.NETでは最低限、TextBoxコントロールが既定でサニタイジング処理を行う。

-その他のコントロール~
しかし、Labelコントロール等は既定でサニタイジングされないので、~
TextBoxコントロールの入力をそのままLabelコントロール等に持って行くと、~
XSSが可能な脆弱性のあるWebアプリケーションが出来上がる。

**[[ASP.NET MVC>http://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20MVC]] [#n6ee92f6]

***要求の検証 相当 [#g5fcd1f4]
MVCには、Web Formsの「要求の検証」相当の機能がないので、代替可能なValidateInput属性を使用する。

***コントロール 相当 [#p3d73c1d]
-MVCには、Web Formsの「コントロール」相当の機能がないので、HTMLヘルパを使用する。
-HTMLヘルパには ≒ Web Formsの「コントロール」で、基本的にサニタイジング処理が実装されている。

*対応方針の案 [#fa2c6c6c]
案件依存だが・・・。

**[[ASP.NET Web Form>http://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20Web%20Form]] [#u0873b5b]

***要求の検証 = ON の場合 [#x62c89f6]
要求の検証をONで、ランタイムエラー表示を回避したい場合、~
HttpRequest.FilterでPOSTのBodyをHTMLエンコードするなどの方式が考えられる。

-HttpRequest.Filter プロパティ (System.Web)~
https://msdn.microsoft.com/ja-jp/library/system.web.httprequest.filter.aspx

Webメソッド(ASP.NET Web Services, WCF, ASP.NET Web API)のBodyを~
エンコードしないように、HTTPメソッドやURLのファイル拡張子を判別すると良いと考える。

***要求の検証 = OFF の場合 [#i84afbe2]
要求の検証をOFFにした際の仕様の組み方は、~

基本的には、

-[[カスタムコントロールのカスタマイズ>http://techinfoofmicrosofttech.osscons.jp/index.php?.NET%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E6%96%B9%E6%B3%95]]での対応か?

-ライブラリ等で都度変換を行うか?

になると考える。

**[[ASP.NET MVC>http://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20MVC]] [#g3644480]

同様に、ValidateInput属性か、HTMLヘルパを使用する。

**判断材料 [#z95fb206]
こちらは、検出されたら基本的に対応する。
-攻撃の成功が割と明らかなので、誤検知が少ない。
-攻撃されると、CookieやSessionIDが漏洩するので、インターネット環境では対策必須。

*参考 [#e1952d66]
-ASP.NET MVCのセキュリティ対策とクライアントサイドスクリプト活用方法 (1/4):CodeZine(コードジン)~
http://codezine.jp/article/detail/4467


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS