「[[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] -ASP.NET MVCのセキュリティ対策とクライアントサイドスクリプト活用方法 (1/4):CodeZine(コードジン)~ http://codezine.jp/article/detail/4467 ***要求の検証 相当 [#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が漏洩するので、インターネット環境では対策必須。 ***攻撃対象 [#p4e64803] 一般的に、足がつかない、 -匿名アクセス可能なサイトか、 -フリーメールサービスのアドレスでサインアップ可能なサイト が多いと考える。 ***攻撃者 [#z2bcbf96] -上記のような匿名アクセスが可能なサイトの場合、誰でも攻撃可能。 -会員制サイトの場合、そのサイトを利用可能な会員でしないと、攻撃方法を見い出せない。 ***攻撃方法 [#s35e1263] 以下の攻撃方法が有る。 -タイプ 1:反射型のXSS (非持続的)~ 不正なデータをWebページのURLなどに仕込む。 -タイプ 2: 格納型のXSS (持続的)~ 不正なデータを標的サイトのデータストアに保存する。 -タイプ 0: DOMベースのXSS~ 正規スクリプトによるDOM操作が原因で発生するタイプのXSS *参考 [#e1952d66] -クロスサイトスクリプティング - Wikipedia~ https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%82%B9%E3%82%B5%E3%82%A4%E3%83%88%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0 -情報処理推進機構:情報セキュリティ:脆弱性関連情報の取扱い:~ 知っていますか?脆弱性 (ぜいじゃくせい)/2. クロスサイト・スクリプティング~ https://www.ipa.go.jp/security/vuln/vuln_contents/xss.html -クロスサイトスクリプティング(XSS)とは - 脅威と対策 | トレンドマイクロ~ http://www.trendmicro.co.jp/jp/security-intelligence/threat-solution/xss/index.html