標準コントロールのセキュリティ保護

更新 : 2007 年 11 月

ASP.NET の標準コントロールは、ページがサーバーにポストバックされる前に、ユーザーが情報を入力したり選択したりできるフォームを作成できるようにするコントロールのグループです。標準コントロールは、Control クラスを継承する Web サーバー コントロールです。たとえば Web サーバー コントロールには、TextBoxImageAdRotator などのコントロールがあります。このトピックでは、標準コントロールのセキュリティを強化するうえで役立つ構成およびコーディングの推奨手順について説明します。

コーディングと構成の推奨手順を使用すると、アプリケーションのセキュリティを向上できますが、Microsoft Windows やインターネット インフォメーション サービス (IIS: Internet Information Services) の最新のセキュリティ更新プログラムと共に Microsoft SQL Server やその他のデータ ソースのセキュリティ更新プログラムを使用して、アプリケーション サーバーを常に最新の状態に維持することも大切です。

安全なコードの記述およびアプリケーションのセキュリティ保護に関する推奨される手順の詳細については、『Writing Secure Code』(Michael Howard および David LeBlanc の共著)、または Microsoft Patterns and Practices 提供のガイダンスを参照してください。

他の種類のコントロールの特別なセキュリティ対策に関する情報は、以下のトピックでも入手できます。

AdRotator コントロール

AdRotator コントロールは、広告ファイル (既定では XML ファイル) に定義された広告を表示します。広告をデータベースに格納し、プログラムによって抽出することもできます。AdRotator コントロールをセキュリティで保護するには、次のガイドラインに従ってください。

  • XML ファイルに広告情報を格納する場合は、Web サイトの App_Data フォルダにファイルを配置します。このフォルダの内容は Web から要求されても提供されないためです。

  • 保護を強化するために、.xml というファイル名拡張子を広告ファイルで使用しないでください。代わりに .ads などの拡張子を使用し、サイトの Web.config ファイルの次の要素を使って、.ads 拡張子を IIS 上の ASP.NET および ASP.NET の禁じられたハンドラに割り当てます。

    <httpHandlers>
      <add verb="*" path="*.ads" type="System.Web.HttpForbiddenHandler" />
    </httpHandlers>
    

    ファイル名の拡張子を IIS 上の ASP.NET に割り当てる方法については、「方法 : HTTP ハンドラを登録する」を参照してください。

  • 広告ファイルを読み取るユーザー アカウント (複数可) に、適切なアクセス許可 (通常は読み取り専用) を設定します。Web サイトが匿名アクセスをサポートする場合、このアカウントは一般にローカル ASPNET ユーザー アカウントか、NETWORK SERVICE アカウントです。

  • 広告ファイルが存在しない場合、AdRotator コントロールでエラーが発生し、ファイルのパスと名前が表示されるため、機密情報が漏洩する可能性があります。この問題を回避するには、構成ファイルに customErrors 要素を設定し、カスタム エラー ページをリダイレクトして、アプリケーション内の任意の場所で未処理の例外が発生した場合に呼び出されるグローバル エラー ハンドラを作成するなど、適切なエラー処理の手法に従います。詳細については、「方法 : 安全なエラー メッセージを表示する」を参照してください。

  • データベースから広告情報を読み取る場合は、データベースへのアクセスをセキュリティで保護するためのガイドラインに従います。詳細については、「データ アクセスのセキュリティ保護」を参照してください。

  • 信頼関係のないソースから取得した広告情報は、AdRotator コントロールで使用する前に入念にチェックします。AdRotator コントロールでは、広告ファイルから読み取った情報の検証やチェックは行わないため、広告ファイルやデータベースに示されているとおりにイメージや URL を Web ページに描画します。

BulletedList、CheckBoxList、RadioButtonList、DropDownList、ListBox

BulletedListCheckBoxListDropDownListListBox、および RadioButtonList の各コントロールは、コレクションの内容またはデータベースのデータに基づいて、異なる種類の HTML 要素 (ul、input、および select) を描画します。これらのコントロールをセキュリティで保護するには、次のガイドラインに従ってください。

Calendar コントロール

Calendar コントロールは、カレンダー内での移動を有効にする LinkButton コントロールを描画します。LinkButton コントロールは、クライアント スクリプトを使用してポストバックを実行します。セキュリティ上の理由からブラウザでクライアント スクリプトが無効になっている場合、Calendar コントロールは移動をサポートしません。

Calendar コントロールを使用して日付の移動を行わない場合でも、日付は常に表示できます。Calendar コントロールで選択されている日付が適切に書式設定されていることを前提としないでください。Calendar コントロールの日付を内部の DateTime 書式に変換するときには、日付が正しい書式でない場合に適切なエラー処理を必ず使用してください。

FileUpload コントロール

FileUpload コントロールは、ユーザーがコンピュータから Web サーバー コンピュータにファイルをアップロードできるようにします。FileUpload コントロールをセキュリティで保護するには、次のガイドラインに従ってください。

  • ユーザーがアップロードしたファイルを信頼しないでください。悪意のあるユーザーが実行可能ファイルのアップロードを試みる可能性があります。アップロードされたファイルを保存するときには、ファイル名拡張子をチェックするか、そのファイルに独自の拡張子を割り当てます。

  • アップロードしたファイルの保存場所について、ユーザーが任意のパスを指定できるようにしないでください。ファイル名に開発者自身が追加したものではないパス情報が含まれていないかどうか確認します。

  • Web サイトの内部構造は、ファイルをアップロードしているユーザーに公開しないでください。

  • アップロードされたファイルを保存するフォルダに対してアプリケーションを実行するユーザー アカウント (複数可) に、読み取り/書き込みアクセス許可を設定します。Web サイトが匿名アクセスをサポートする場合、このアカウントは一般にローカル ASPNET ユーザー アカウントか、NETWORK SERVICE アカウントです。ただし、読み取り/書き込みアクセス許可は、アプリケーションでアップロードされたファイルを格納するフォルダだけに制限します。

  • 構成ファイルで httpRuntime 要素の maxRequestLength 属性を設定して、サービス拒否攻撃を防御します。既定では、要求の最大長は 4 MB です。アップロードされたファイルのサイズに影響するその他の構成設定として、httpRuntime 要素の requestLengthDiskThreshold 属性、および processModel 要素の memoryLimit 属性があります。

  • コントロールから返される HttpPostedFile オブジェクトの ContentLength プロパティを照会して、アップロードされたファイルのサイズを確認し、そのサイズを使用してファイルを受け入れるかどうかを決定します。

HiddenField コントロール

HiddenField コントロールを使用すると、サーバー コード内の <input type="hidden"> HTML 要素の内容を設定できます。隠しフィールドは、ページ処理の実行時に有用であっても、ユーザーには表示する必要のないページ内の情報を格納するために使用します。HiddenField コントロールをセキュリティで保護するには、次のガイドラインに従ってください。

  • HiddenField コントロールに機密情報を格納しないでください。情報はブラウザに表示されませんが、ページには含まれているため、ユーザーはページのソースでその情報を容易に表示できます。

  • 隠しフィールドの情報を信頼しないでください。悪意のあるユーザーが隠しフィールドの内容を改ざんする可能性があります。

HyperLink コントロールは、ブラウザに URL を表示します。URL が信頼されている場所を参照していることを確認してください。

Image コントロールと ImageMap コントロール

グラフィックスを表示するために、Image コントロールと ImageMap コントロールはブラウザに URL を表示します。URL が信頼されている場所を参照していることを確認してください。

ImageButton コントロール

ImageButton コントロールは、クライアント スクリプトを使用してポストバックを実行するイメージ (img 要素) を描画します。セキュリティ上の理由から、ブラウザでクライアント スクリプトが無効になっている場合、このコントロールは機能しません。

グラフィックを表示するために、このコントロールはブラウザに URL を表示します。URL が信頼されている場所を参照していることを確認してください。

Label コントロールと Literal コントロール

Label コントロールと Literal コントロールは、テキストをそのままブラウザに渡してページにそのテキストを表示します (Label コントロールでは、書式を指定することもできます)。テキストに HTML マークアップが含まれている場合、既定ではブラウザがマークアップを解釈し、それに応じてテキストを表示します。テキストには、スクリプトの実行が含まれている場合もあります。

Label コントロールを使用するときに、テキストに悪意のある内容が含まれているかどうかが不確かな場合は、HTML エンコーディングを使用して HTML を文字列表現に変換します。詳細については、「方法 : HTML エンコーディングを文字列に適用して Web アプリケーションをスクリプトによる攻略から保護する」を参照してください。

Literal コントロールを使用するときに、テキストに悪意のある内容が含まれているかどうかが不確かな場合は、次のいずれかを実行します。

詳細については、「方法 : HTML エンコーディングを文字列に適用して Web アプリケーションをスクリプトによる攻略から保護する」を参照してください。

LinkButton コントロール

LinkButton コントロールは、クライアント スクリプトを使用してポストバックを実行するリンク (a 要素) を表示します。セキュリティ上の理由から、ブラウザでクライアント スクリプトが無効になっている場合、このコントロールは機能しません。

MultiView

MultiView コントロールを使用すると、複数の View コントロールを追加し、条件付きで表示できます。これにより、マルチページ フォームのようなページを作成できます。

URL のクエリ文字列など、容易に改ざんされる可能性のあるものに基づいてビューを切り替える場合、本来は表示できるはずのないユーザーがビューを表示できるようになる可能性があります。したがって、ビューを切り替える機構ができるだけ安全であるようにすることが必要です。詳細については、「ASP.NET の状態管理の概要」を参照してください。

TextBox コントロール

TextBox コントロールを使用すると、ユーザーはほぼあらゆるテキストをページに入力できるため、このコントロールでユーザー入力を受け入れる場合は注意が必要です。TextBox コントロールをセキュリティで保護するには、次のガイドラインに従ってください。

  • できるだけ検証コントロールを使用して、ユーザー入力を受け入れ可能な値に制限します。詳細については、「検証コントロールの概要」を参照してください。

  • サーバー コードを実行する前に、IsValid プロパティに true が設定されていることを確認します。

  • 冗長サーバー検証を使用します。特に CustomValidator コントロールの場合は、クライアント側検証ロジックだけでなく、必ず冗長サーバー検証を作成してください。

  • TextBox コントロールの MaxLength プロパティを設定して、ユーザーが入力できるテキストのサイズを制限します。悪意のあるユーザーが、アプリケーションのパフォーマンスに悪影響を与える可能性があり、テキスト ボックスで膨大な量の情報を送信して、データベース エラーを発生させる可能性があります。

  • HtmlEncode メソッドを使用してユーザー入力をエンコードします。このメソッドは、HTML をテキスト表現に転換し (たとえば、<b> は &ltb&gt; になります)、HTML がブラウザで実行されないようにします。詳細については、「方法 : HTML エンコーディングを文字列に適用して Web アプリケーションをスクリプトによる攻略から保護する」を参照してください。

  • TextMode プロパティを Password に設定し、テキスト ボックスの内容がテキスト ボックスに表示されないようにします (内容は点で表示されます)。TextMode プロパティを Password に設定しても、情報は保護されません。つまり、テキスト ボックスの内容は暗号化されたり解読不可にされたりせず、情報がクリア テキストのままサーバーに送信されます。このため、Password を使用するときは、データを確実に保護するために、別の方法を併用します。

  • パスワードやクレジット カード番号などの機密情報を収集する場合は、SSL (Secure Sockets Layer) を使用して、クライアントとサーバー間の通信を保護します。SSL は、使用されるあらゆる TextBox コントロールに適用されます。これには、CreateUserWizard コントロールなどのように、TextBox の各コントロールを結合するコントロールも含まれます。

ウィザード

Wizard コントロールを使用すると、複数の手順から成る入力フォームを作成できます。Wizard コントロールを使用する場合は、次のセキュリティ上の考慮事項に留意してください。

  • Wizard は、本質的に機密情報を保護するわけではありません。ウィザードで重要情報を収集する場合は、SSL を使用して、Wizard を含むページについてクライアントとサーバー間の通信を保護します。

  • この機能をサポートするために、Wizard コントロールには、多数の非表示コントロールが含まれています。ユーザーがこれらのコントロールやその値を操作して、ウィザードの手順の順序を変えて表示したり、一部のユーザーだけに表示する必要のあるウィザードの手順を表示したりする可能性があります。このようなことを防止するために、ウィザードの手順が正しい順序で表示されること、および適切な条件を満たさない限り、機密情報を処理する手順が表示されないことを確認してください。

XML コントロール

Xml コントロールは、XML ファイルの内容や、XML を含む文字列をページに表示します。XML 変換を適用して表示することもできます。Xml コントロールをセキュリティで保護するには、次のガイドラインに従ってください。

  • XML ファイルの内容を表示する場合、実用的であれば、XML ファイルをサイト内の App_Data フォルダに配置します。このフォルダの内容は Web から要求されても提供されないためです。

  • 信頼されたソースの XML だけを表示します。

  • 信頼されたソースの変換だけを使用します。

参照

概念

ログイン コントロールのセキュリティ保護

Web パーツ ページの保護

データ アクセスのセキュリティ保護