ブラウザ定義ファイルの保護
更新 : 2007 年 11 月
ブラウザ定義ファイル (.browser ファイル) には、ブラウザ (Internet Explorer) のクラスの機能と、特定のブラウザ (Internet Explorer 6.0) に関する情報が収められています。実行時に ASP.NET は .browser ファイル内の情報に基づいて、要求を行ったブラウザ、ブラウザに備わっている機能、およびそのブラウザにマークアップを表示する方法を判断します。詳細については、「ブラウザ定義ファイルのスキーマ (browsers 要素)」を参照してください。
安全なコードの記述とアプリケーションのセキュリティ保護のためのベスト プラクティスの詳細については、Michael Howard と David LeBlanc 共著『Writing Secure Code』、および「Microsoft Patterns and Practices」のガイダンスを参照してください。
メモ : |
---|
ブラウザ定義ファイルは、.NET Framework Version 2.0 で新たに追加されました。それ以前の .NET Framework では、browserCaps 要素を使用して構成ファイルにブラウザ定義を記述していました。 |
ブラウザ定義ファイルのセキュリティ
.NET Framework のクラスとブラウザ定義ファイルを含むブラウザのすべての機能は、アプリケーション レベルでは部分信頼、グローバル レベルでは完全信頼を必要とします。グローバル ブラウザ定義アセンブリは、グローバル アセンブリ キャッシュに配置される前に一意のマシン キーで署名され、不正に変更できません。%SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers ディレクトリのブラウザ定義ファイルは、アクセス制御リスト (ACL: access control lists) によって保護され、変更するには管理者特権が必要です。
ブラウザ定義ファイル ディレクトリ
グローバル ブラウザ ディレクトリとアプリケーション レベルの App_Browsers サブディレクトリには、ファイル名に拡張子 .browser の付いたファイルのみを格納する必要があります。ASP.NET のブラウザ機能によりコンパイルされるのは、.browser ファイルのみです。また、ASP.NET により、これらのディレクトリ内のファイルは、Web サーバーによって提供されたり、他のアプリケーションのコードからアクセスされたりしないように保護されます。
ブラウザ定義ファイルの ACL
次の表に、%SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers ディレクトリ内の .browser ファイルに既定で設定される ACL の一覧を示します。これらの ACL はディレクトリ自体でも設定されますが、ACL には CREATOR OWNER グループの Modify アクセス許可が含まれています。このディレクトリは読み取り専用です。
Windows アカウント |
アクセス許可 |
---|---|
管理者 |
フル コントロール |
ASP.NET コンピュータ アカウント (<server>\ASPNET) |
読み取りおよび実行 |
CREATOR OWNER |
フル コントロール |
IIS_WPG (<server>\IIS_WPG) |
読み取りおよび実行 |
LOCAL SERVICE |
読み取りおよび実行 |
NETWORK SERVICE |
読み取りおよび実行 |
Power Users (<server>\Power Users) |
変更 |
SYSTEM |
フル コントロール |
Users (<server>\Users) |
読み取りおよび実行 |
次の表に、App_Browsers サブディレクトリ内のアプリケーション レベルの .browser ファイルに設定する必要がある ACL の一覧を示します。
Windows アカウント |
アクセス許可 |
---|---|
管理者 |
フル コントロール |
IIS_WPG (<server>\IIS_WPG) |
読み取りおよび実行 |
INTERACTIVE |
読み取り |
インターネット ゲスト アカウント (<server>\IUSR_<server>) |
読み取り |
NETWORK |
読み取り |
NETWORK SERVICE |
読み取り |
SYSTEM |
フル コントロール |
Users (<server>\Users) |
読み取りおよび実行 |
ASP.NET Web サイト管理ツール アカウント |
特殊 |
ブラウザ定義ファイルの追加
ダウンロード元が信頼できない場合は、ブラウザ定義ファイルのダウンロードまたはインストールは行わないでください。たとえば、新しいブラウザ定義ファイルの場合、次の属性のいずれかで不明な名前空間が参照されていないか確認してください。
controlAdapters 要素の markupTextWriterType 属性
capability 要素の value 属性
adapter 要素の controlType 属性と adapterType 属性
有効な要素と属性の詳細については、「ブラウザ定義ファイルのスキーマ (browsers 要素)」を参照してください。
ブラウザ定義ファイルの変更
新しいブラウザ定義ファイルをグローバル ディレクトリに追加するか、またはグローバル ブラウザ定義ファイルに変更を加える場合、%SystemRoot%\Microsoft.NET\Framework\version フォルダ内にある Aspnet_regbrowsers.exe ツールを使用してブラウザ機能のコレクションを手動で再コンパイルするか、BrowserCapabilitiesCodeGenerator クラスを使用してプログラムで再コンパイルを実行するまで変更内容は有効になりません。
ただし、アプリケーション レベルのブラウザ定義への変更は再コンパイルする必要がありません。アプリケーション レベルのブラウザ定義への変更は、動的に再コンパイルおよび再適用されます。
共有ホスト環境でのブラウザ定義ファイルの保護
共有ホスト環境では、ブラウザ定義ファイルの直接の変更、構成 API を介した変更、およびその他の管理ツールや構成ツールにより、不正なユーザーがブラウザ定義ファイルの設定を変更する可能性があります。このような脅威を排除するには、強力な ACL をブラウザ定義ファイル内に保持します。ブラウザ定義ファイル ディレクトリのコンテンツはコンパイルされるため、アプリケーションの他のコード ディレクトリと同じ方法で保護する必要があります。ホスト管理者が、あるユーザーに対してアプリケーションへのコードの追加を禁止する場合、そのユーザーに対してブラウザ定義ファイルの追加も禁止する必要があります。
ブラウザ定義ファイルのファイル ロックの留保
ブラウザ定義ファイルへの保存やファイル ハンドルのオープンを複数回試みるだけで、ブラウザ定義ファイルがロックされる場合があります。不正なユーザーが、%SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers ディレクトリ内のブラウザ定義ファイルのロックを試みる可能性があります。ただし、ブラウザ定義ファイルをロックするには、ASP.NET で既定で無効になっている完全な信頼が必要になります。
構成 API による任意のファイルの読み取り
ブラウザ定義の構成 API のクラスは、アプリケーション ドメインに含まれないディレクトリや、ファイル名の拡張子が .browser 以外のファイルを読み取ることができません。
ブラウザのキャッシュ機能
実行時にブラウザ定義ファイル情報は、BrowserCapabilitiesFactory オブジェクト内の既知のブラウザのコレクションにマージされます。要求が行われると、ASP.NET は要求のヘッダーで要求側ブラウザを識別し、要求側ブラウザに対応する HttpCapabilitiesBase オブジェクトをコンパイルします。オブジェクトはキャッシュされ、同じブラウザから別の要求があると再利用されることがあります。
不正なクライアントが、新しい要求ごとに異なる要求ヘッダーを使用して、ASP.NET が要求を受信するたびにブラウザ機能オブジェクトを生成およびキャッシュするような要求で Web サーバーをオーバーフローさせる可能性があります。これは、最終的にサービス拒否攻撃を引き起こす場合があります。このような脅威を排除するには、Machine.config ファイルまたは Web.config ファイルに browserCaps 要素 (ASP.NET 設定スキーマ) 要素の userAgentCacheKeyLength 属性を設定します。この要素は、内部キャッシュにキャッシュされた機能オブジェクトを特定するためのキーとして使用する文字長を定義します。既定値は 64 です。この値を小さくすると、キャッシュ内で一致するブラウザが見つかる確率が高くなり、キャッシュのロードを減らすことができます。
例外
機密情報が望ましくないソースに公開されることを防ぐには、詳細なエラー情報を表示しないようにするか、またはクライアントが Web サーバーそのものであるときだけ詳細なエラー メッセージ情報を表示するように、アプリケーションを構成する必要があります。詳細については、「customErrors 要素 (ASP.NET 設定スキーマ)」を参照してください。
[イベント ログ]
サーバーが Windows Server 2003 を実行している場合、イベント ログをセキュリティ保護したり、イベント ログのサイズ、保持期間、その他の機能のパラメータを設定したりすることによってアプリケーションのセキュリティを強化し、間接的なサービス拒否攻撃を防ぐことができます。イベント ログの構成の詳細については、Windows の [ヘルプとサポート]ヘルプとサポートで「イベント ビューア」を検索してください。
参照
処理手順
方法 : ASP.NET Web ページでブラウザの種類を検出する
概念
ASP.NET Web サーバー コントロールとブラウザの機能