プロファイル プロパティの保護
更新 : 2007 年 11 月
ASP.NET プロファイル機能を使用すると、データベースなどのデータ ソースにユーザー設定を格納して取得できます。アプリケーションの構成ファイルでユーザー プロファイルを形成するプロパティとグループを指定します。ASP.NET は実行時に構成情報を使用して、各プロファイル プロパティに対して厳密に型指定されたアクセサを含むクラスを動的に生成します。このクラスは、静的な Profile プロパティを使用して公開されます。プロファイル プロパティの値は、プロファイル プロバイダによってクリア テキストの XML またはシリアル化されたバイナリ形式でデータ ソースに格納されます。
コーディングと構成に関するベスト プラクティスに従えば、アプリケーションのセキュリティを強化できます。Microsoft Windows および Microsoft インターネット インフォメーション サービス (IIS) の最新のセキュリティ更新プログラム、および Microsoft SQL Server またはその他のプロファイル データ ソースの更新プログラムを使用して各自のアプリケーション Web サーバーを常に最新の状態にすることも重要です。
安全なコードの記述とアプリケーションのセキュリティ保護の推奨事項の詳細については、Michael Howard と David LeBlanc 共著『Writing Secure Code』、および Microsoft Patterns and Practices が提供する推奨事項 (https://www.microsoft.com/resources/practices/default.mspx) を参照してください。
プロファイル構成の保護
ASP.NET プロファイル機能は、既定で有効になっています。既定の構成は最も安全な値に設定されていますが、アプリケーションがユーザー プロファイル機能を必要としない場合は無効にすることをお勧めします。プロファイルの構成設定と既定値については、「profile 要素 (ASP.NET 設定スキーマ)」を参照してください。プロファイル プロパティで設定できる匿名 ID は、既定で無効になっています。匿名 ID の構成設定とその既定値の詳細については、「anonymousIdentification 要素 (ASP.NET 設定スキーマ)」を参照してください。
構成値の保護
構成ファイル内に機密情報を格納する場合は、プロテクト構成を使用して機密情報を暗号化することをお勧めします。特に慎重を要する情報としては、machineKey 構成要素に格納される暗号キーや、connectionStrings 構成要素に格納されるデータ ソース接続文字列などがあります。詳細については、「保護された構成を使用した構成情報の暗号化」を参照してください。
プロファイル データ ソースへの接続の保護
接続文字列
前述のように、SQL Server を実行するコンピュータまたはその他のデータ ソースと通信するために使用する接続文字列に格納されている機密情報を保護することは重要です。データベースへの安全な接続を維持するために、プロテクト構成を使用して構成ファイルで接続文字列情報を暗号化することをお勧めします。詳細については、「保護された構成を使用した構成情報の暗号化」を参照してください。
統合セキュリティを使用した SQL Server への接続
SQL Server を実行するコンピュータに接続する場合は、接続文字列をセキュリティの侵害から保護し、ユーザー ID とパスワード情報が公開されないようにするために、統合セキュリティを使用することをお勧めします。統合セキュリティを使用する接続を指定して、SQL Server を実行するコンピュータに接続すると、プロファイル プロバイダはプロセスの ID に戻ります。アプリケーション プールなどの ASP.NET を実行しているプロセスの ID が既定のプロセス アカウントまたは制限付きのユーザー カウントであることを確認することをお勧めします。詳細については、「ASP.NET の偽装」を参照してください。
SQL Server データベースへのアクセス許可
既定でプロファイル情報を格納するために使用される SQL Server データベースには、データベース ロールとビューが含まれます。これによって、アプリケーションが要求する権限を保有するユーザーのみにアクセスを制限できます。SQL Server プロファイル データベースに接続するユーザー ID には最低限必要な権限のみを割り当てることをお勧めします。詳細については、「SQL Server 向けアプリケーション サービス データベースのロールとビュー」を参照してください。
プロファイル データ ソースの重要情報の保護
既定のユーザー プロファイル プロバイダは、プロファイル データ ソースに格納されている値を暗号化しません。データ ソースのセキュリティが侵害された場合に機密情報が公開されないようにするために、すべての機密情報をプロファイル データ ソースに格納する前に暗号化することをお勧めします。重要情報はプロファイル プロパティに値を格納する前に暗号化できますが、ProfileBase クラスまたは ProfileProvider クラスを拡張して暗号化機能を提供することもできます。
アプリケーション間の匿名プロファイル データの共有を防止する
アプリケーションおよびそのアプリケーションで使用されるプロファイル プロパティで匿名 ID が有効になっている場合は、匿名のプロファイル プロパティ値が他のアプリケーションに公開されるというリスクがあります。これは、匿名 ID の cookiePath 属性が複数のアプリケーションを含むパスに設定され、複数のアプリケーションが共通のドメインに存在する場合に発生します。
ユーザー プロファイルで匿名 ID を使用し、アプリケーション間で匿名ユーザーを個別に処理する場合は、各アプリケーションの machineKey 要素に個別の暗号キーを指定し、匿名 ID の Cookie のスコープを対応するアプリケーションに設定し、ApplicationName プロパティを各アプリケーションに対して異なる値に設定することをお勧めします。
プロファイルを使用する Web ページの保護
プロファイル プロパティに格納されている重要情報を処理するアプリケーション ページは、標準の Web セキュリティ メカニズムを使用して保護する必要があります。このメカニズムには、SSL (Secure Sockets Layer) の使用、ユーザー情報の更新やユーザーの削除のような重要な操作を行うときにユーザーのログオンを求めるなどの措置が含まれます。さらに、重要情報を Cookie に格納しないようにします。
サービス拒否攻撃に対するセキュリティ
更新や大規模な検索操作を実行する ProfileManager クラスのメソッドを多くのクライアントが同時に呼び出すと、プロファイル データ ソースの応答性が低下することがあります。アプリケーションをサービス拒否攻撃から保護するために、管理ユーザーだけが ASP.NET ページにアクセスしてデータベースの更新およびプロファイルに関連する検索を実行できるようにします。
エラー メッセージとイベント
例外
機密情報が公開されることを防ぐには、詳細なエラー情報を表示しないように構成するか、アプリケーションがローカルの Web サーバーで実行されている場合のみ詳細なエラー メッセージ情報を表示するようにアプリケーションを構成します。詳細については、customErrors 構成要素を参照してください。
[イベント ログ]
ASP.NET プロファイル機能は、既定でイベント ログに情報を格納する ASP.NET Health Monitoring を使用して特定のエラー条件の情報をログ出力します。サーバー コンピュータが Windows Server 2003 を実行している場合、イベント ログをセキュリティ保護したり、サイズや保持期間などのイベントログ パラメータを設定したりすることによってアプリケーションのセキュリティを強化し、アプリケーションに対する間接的なサービス拒否攻撃を防ぐことができます。
トレース情報
Web サーバーは、プロファイル機能に関連する特定のアクションをトレースし、トレース情報をログ ファイルに格納するように設定できます。トレース ログ ファイルにはユーザー名などの機密情報が格納されることがあるため、トレース機能の使用、トレース ログ ファイルの場所の構成、およびトレース ログ ファイルへのアクセスは管理者のみに制限することをお勧めします。
カスタムのプロファイル プロバイダ
データベースへのアクセスのためのカスタムのプロファイル プロバイダを作成する場合は、SQL 注入攻撃などを防止するためにセキュリティ上の推奨事項に従ってください。カスタムのプロファイル プロバイダを利用する場合は、セキュリティ上の推奨事項に従ってプロバイダを必ず点検してください。