マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

ASP.NETでのXSS対策のサニタイジング方針について纏める。

対応方針の材料

一般的に、どのような対応方法があるか?

ASP.NET Web Forms

要求の検証

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

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

web.configで

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

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

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

<@ Page validateRequest="false" %>

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

コントロール

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

ASP.NET MVC

要求の検証 相当

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

コントロール 相当

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

対応方針の案

案件依存だが・・・。

ASP.NET Web Form?

要求の検証 = ON の場合

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

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

要求の検証 = OFF の場合

要求の検証をOFFにした際の仕様の組み方は、

基本的には、

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

になると考える。

ASP.NET MVC

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

要求の検証 = ON の場合

ValidateInput?属性をtrueに設定する。

[ValidateInput(true)]

要求の検証 = OFF の場合

  • ValidateInput?属性がfalseの場合、
    [ValidateInput(false)]
  • HTMLヘルパでサニタイジングする。

判断材料

こちらは、検出されたら基本的に対応する。

  • 攻撃の成功が割と明らかなので、誤検知が少ない。
  • 攻撃されると、CookieやSessionIDが漏洩するので、インターネット環境では対策必須。

攻撃対象

一般的に、足がつかない、

  • 匿名アクセス可能なサイトか、
  • フリーメールサービスのアドレスでサインアップ可能なサイト

が多いと考える。

攻撃者

  • 上記のような匿名アクセスが可能なサイトの場合、誰でも攻撃可能。
  • 会員制サイトの場合、そのサイトを利用可能な会員でしないと、攻撃方法を見い出せない。

攻撃方法・対策方法

参考


Tags: :テスト


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-02-03 (月) 20:00:15 (55d)