次の方法で共有


ASP.NET のサイト ナビゲーションの保護

更新 : 2007 年 11 月

ASP.NET のサイト ナビゲーションは、Web サイトのすべてのページへのリンクを中央で保管する場所を維持する機能を提供します。このリンクは、特定の Web サーバー コントロールを含めることにより、各ページにリストまたはナビゲーション メニューとしてレンダリングできます。

ASP.NET サイト ナビゲーションは、SiteMapPathSiteMapDataSourceTreeViewMenu などのナビゲーション コントロールで一般的に使用されます。また、SiteMapSiteMapProvider クラスと共にプログラムでも使用されます。ここでは、ナビゲーション機能のセキュリティを強化する方法について説明します。

コーディングと構成に関する推奨手順に従うと、アプリケーションのセキュリティを改善できますが、Microsoft Windows や Microsoft Internet Information Services (IIS) の最新のセキュリティ更新プログラムと共に Microsoft SQL Server、またはその他のメンバシップ データ ソースの更新プログラムを使用して、アプリケーション サーバーを常に最新の状態に維持することも大切です。詳細については、「Windows Update」の Web サイトを参照してください。

安全なコードの記述とアプリケーションのセキュリティ保護のためのベスト プラクティスの詳細については、Michael Howard と David LeBlanc 共著『Writing Secure Code』、および「Microsoft Patterns and Practices」のガイダンスを参照してください。「Web アプリケーションのセキュリティに関する基本的な対策」も参照してください。

このトピックの内容

ナビゲーションの構成の保護

サイト マップ データの保護

特定のユーザーに対してナビゲーション リンクを非表示にする

サイト ナビゲーション API

カスタムのサイト マップ プロバイダの実装の保護

エラー メッセージとイベント

ウイルス スキャナ

ナビゲーションの構成の保護

ASP.NET サイト ナビゲーションの機能は、既定で有効になっています。この機能は、構成ファイル (Web.config) の siteMap 要素の enabled 属性を false に設定して無効にできます。次のセクションでは、Web.config ファイルのナビゲーションに関するデータの保護について説明します。ナビゲーションの構成設定と既定値については、「siteMap 要素 (ASP.NET 設定スキーマ)」を参照してください。

構成値の保護

既定の ASP.NET サイト マップ プロバイダを使用する場合は、Web.config ファイルに含まれるナビゲーション構成の設定を保護する必要はありません。ただし、データベースを使用するカスタムのサイト マップ プロバイダを実装し、構成ファイルにデータベース接続文字列を格納する場合は、「データ アクセスのセキュリティ保護」の推奨事項に従って接続文字列を暗号化してください。

ホスト環境では、別のサイト マップまたはサイト マップ プロバイダを使用するように他のユーザーがサイトを再構成するのを防ぐために、構成ファイルで siteMap 要素 (ASP.NET 設定スキーマ) 要素のオーバーライド権限を拒否する必要があります。詳細については、「構成設定のロック」を参照してください。「ホストされた環境での ASP.NET アプリケーションのセキュリティ」も参照してください。

URL のマッピング

Web.config 構成ファイルの urlMappings 要素 (ASP.NET 設定スキーマ) 要素を使用すると、URL を簡易 URL にマップできます。ASP.NET では、~/filename.aspx などのアプリケーションにおける相対参照の構文のみが許可されます。つまり、ASP.NET では、アプリケーションの外部にあるページを指す URL へのマッピングはできません。これによって、ホスト環境で ISP クライアントはアプリケーションの外部にあるページを表示できません。

サイト マップ データの保護

既定では、ASP.NET は既知の拡張子 (.sitemap など) を持つファイルをクライアントによるダウンロードから保護するように設定されています。データを保護するために、ファイル名の拡張子が .sitemap 以外のカスタムのサイト マップ データ ファイルは App_Data フォルダに配置し、適切なアクセス制御リスト (ACL: Access Control List) を適用してください。たとえば、Windows 2000 または Windows XP では、ASP.NET プロセス アカウントの読み取り専用アクセスを許可します。Windows 2003 では、ネットワーク サービスの読み取り専用アクセスを許可します。詳細については、「ASP.NET の必須アクセス制御リスト (ACL)」を参照してください。

ASP.NET サイト ナビゲーションは、サイト マップ ファイルをアプリケーションのディレクトリ構造に存在する場合のみ読み込みます。これによって、ホスト環境で別のアプリケーションはサイト マップ データを読み込むことができません。

ASP.NET サイト ナビゲーションでは、アプリケーションのディレクトリ構造の外部のファイルにはアクセスできません。サイト マップに別のサイト マップのファイルを参照するノードが含まれ、ファイルの場所がアプリケーションの外部にある場合は、例外が発生します。この例外には SiteMapNode に指定されたパス、およびそれがアプリケーションのスコープの外部にあることが記載されますが、パスの有効性については示されません。これによって、ASP.NET サイト ナビゲーションを使用する他のユーザーはサーバーで有効なファイル パスを特定できません。

データベースを使用するカスタムのサイト マップ プロバイダを実装する場合にサイト マップ データを保護する方法については、「データ アクセスのセキュリティ保護」を参照してください。

サイト マップの読み込みプロセス

既定の ASP.NET サイトマップ プロバイダは、アプリケーションの起動時にサイトマップ データを XML ドキュメントとして読み込み、静的データとしてキャッシュします。サイトマップ ファイルが極端に大きい場合は、読み込み時に大量のメモリと CPU パワーを使用する可能性があります。ホスト環境では、顧客が各自のサイトに作成できるサイト マップのサイズを制限します。これによって、サービス拒否攻撃からサイトが保護されます。

ASP.NET サイト ナビゲーション機能は、ファイル通知に従ってナビゲーション データを最新の状態に維持します。サイト マップ ファイルが変更されると、ASP.NET はサイトマップ データを再読み込みします。したがって、書き込みアクセスが許可されている子サイト マップで編成されているサイト ナビゲーション構造で、サイト マップを変更するたびに再読み込みが行われることを理解しないユーザーが存在すると、問題が発生する場合があります。すべてのサイト マップ ファイルへのアクセスに制限を設定してください。ファイルを更新するアクセス許可を与えるユーザーと更新するファイルの場所を指定するユーザー グループを定義し、次に、サイト マップ ファイルに対するアクセス許可を個々のユーザー グループに設定します。

特定のユーザーに対してナビゲーション リンクを非表示にする

ASP.NET サイト ナビゲーションでは、ロールによって個々のサイト マップ ノードを保護できます。サイトのナビゲーション構造の一部を特定のユーザーに対して非表示にする場合は、ASP.NET セキュリティ トリミングを有効にします。この機能を有効にすると、ASP.NET は URL 承認をチェックし、さらにオプションでサイト マップ ノードに記載されているファイルに対するアクセス許可をチェックします。ユーザーがアクセス許可を持つファイルへのリンクのみが表示されます。制限されたファイルへのリンクをすべてのユーザーが表示できるようにする場合は、対応するサイト マップ ノードの roles 属性にアスタリスク (*) またはワイルドカード文字を設定します。これによって、すべてのクライアントがリンクを表示できるようになります。詳細については、「ASP.NET のサイト マップ セキュリティ トリミング」を参照してください。

サイト マップに外部 URL を含める

サイト マップでは、ASP.NET アプリケーションの外部の URL を参照できます。ただし、アプリケーションの外部の URL へのアクセスは、ASP.NET ではテストできません。たとえば、https://www.microsoft.com/japan に対応するサイト マップ ノードを作成してセキュリティ トリミングを有効にすると、ASP.NET は外部 URL のアクセス許可をテストできないので、クライアントはハイパーリンクを表示できなくなります。セキュリティ トリミングが有効で、外部 URL に対応するサイト マップ ノードがある場合は、このノードの roles 属性をアスタリスク (*) に設定します。これによって、ASP.NET が外部リンクへのアクセスを承認できなくても、すべてのクライアントがリンクを表示できるようになります。

サイト ナビゲーション API

サイト ナビゲーションのクラスは、コンピュータで実行されるすべてのコードに公開されます。サイト ナビゲーションのクラスは、最低限の信頼で実行されます。ただし、ASP.NET は既定のサイト マップ プロバイダ XmlSiteMapProvider を使用してサイト マップ ファイルを開く際にファイルの I/O 操作を実行する必要があるので、サイト マップ データの読み込みには低度の信頼が必要です。オプションとして、この制限が適用されないカスタムのサイト マップ プロバイダを作成できます。

詳細については、「ASP.NET 信頼レベルとポリシー ファイル」および「ASP.NET サイトマップ プロバイダの実装」を参照してください。

カスタムのサイト マップ プロバイダの実装の保護

カスタムのサイト マップ プロバイダを実装する場合は、セキュリティ上の推奨事項に従ってプロバイダを必ず点検します。このことは、カスタムのサイト マップ プロバイダが正しく実装されていない場合に、セキュリティで保護されていない既定の構成設定などの情報がリークする可能性があるホスト環境で特に重要です。SQL 注入攻撃などの攻撃を回避するための推奨事項に従ってください。たとえば、パラメータの入力を必ず検証します。

データベースの保護の詳細については、「データ アクセスのセキュリティ保護」を参照してください。「ホストされた環境での ASP.NET アプリケーションのセキュリティ」も参照してください。

エラー メッセージとイベント

次のセクションでは、予期しないエラー メッセージやイベントによって公開されるセキュリティ上のリスクを軽減する方法について説明します。

例外メッセージ

ASP.NET サイト ナビゲーション機能がスローする例外では特権情報は公開されません。Web アプリケーションのカスタム クラスに無効な入力や要求があるかどうかを確認およびテストし、例外が発生したときに特権情報が公開されないようにします。

エラー メッセージ

機密情報を不適切なソースに公開しないようにするには、アプリケーションのカスタム エラーを有効にするか、クライアントが Web サーバー自身である場合のみ詳細なエラー メッセージ情報を表示するようにします。詳細については、「customErrors 要素 (ASP.NET 設定スキーマ)」を参照してください。

イベント ログ

コンピュータが Windows Server 2003 を実行している場合は、イベント ログを保護することによってアプリケーションのセキュリティを強化できます。また、イベント ログのサイズ、保持期間などのパラメータを設定し、ログに対する間接的なサービス拒否攻撃を防止します。既定では、管理者セキュリティ グループのメンバだけがイベント ログを表示できます。イベント ログの構成の詳細については、を参照してください。Windows の [ヘルプとサポート] で「イベント ビューア」を検索してください。

ウイルス スキャナ

ウイルス スキャナなどのツールは、サイト マップ ファイルを変更するように構成しないでください。そのように構成すると、不必要なナビゲーション データが再読み込みされます。ASP.NET サイト ナビゲーション機能は、ファイル通知に従ってナビゲーション データを最新の状態に維持するからです。

参照

概念

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

ロールのセキュリティ保護

セッション状態の保護

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

メンバシップのセキュリティ保護

Web アプリケーションのセキュリティ上の脅威の概要

Web アプリケーションのセキュリティに関する基本的な対策

その他の技術情報

ASP.NET Web アプリケーションのセキュリティ

ホストされた環境での ASP.NET アプリケーションのセキュリティ