次の方法で共有


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

更新 : 2007 年 11 月

ASP.NET メンバシップを使用すると、ユーザーの管理および認証を行うことができます。この機能は、一般的にフォーム認証と認証コントロール (LoginLoginViewLoginStatusLoginNamePasswordRecoveryCreateUserWizard などのコントロール) で使用されます。このトピックでは、Web サイトの設定とメンバシップ クラスのコーディングで推奨される手順を実施することによって、メンバシップ機能のセキュリティを最適化する方法について説明します。

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

安全なコードの記述とアプリケーションのセキュリティ保護のためのベスト プラクティスの詳細については、Michael Howard と David LeBlanc 共著『Writing Secure Code』、および Microsoft Patterns and Practices に示すガイダンス (https://www.microsoft.com/resources/practices/default.mspx) を参照してください。

安全なメンバシップ構成

メンバシップ機能は、ASP.NET アプリケーションに対して既定で有効になり、無効にできません。既定の構成設定は、最も安全な値に設定されます。メンバシップの構成設定と既定値については、「membership 要素 (ASP.NET 設定スキーマ)」を参照してください。requiresQuestionAndAnswer 属性は、特に enablePasswordReset または enablePasswordRetrieval が true の場合は、必ず true に設定してください。

構成値の保護

アプリケーションの構成ファイル内に機密情報を格納する場合は、保護された構成 を使用して機密情報を暗号化する必要があります。特に慎重を要する情報としては、machineKey 構成要素に格納される暗号キーや、connectionStrings 構成要素に格納されるデータ ソース接続文字列などがあります。詳細については、「保護された構成を使用した構成情報の暗号化」を参照してください。

暗号化キーのセキュリティ保護とハッシュ

メンバシップ データ ソースのユーザー パスワードは、passwordFormat 属性に Hashed または Encrypted (Hashed が最も安全な形式です) を設定して、暗号化することを強くお勧めします。指定された暗号化アルゴリズムの暗号化キー値は、machineKey 構成要素に格納されます。強力な暗号化を実現するには、選択した暗号化アルゴリズムに対して適切な長さの値がランダムに生成される暗号化キーを指定します。

複数のアプリケーションをホストするサーバーの場合には、アプリケーションごとに一意の暗号化キーを定義することをお勧めします。また、安全性は低下しますが、代わりに単一の暗号化キーを定義し、そのキーで IsolateApps オプションを指定することもできます。

ホスト サーバーのコンピュータ構成は、アプリケーションが構成設定をオーバーライドできないように設定できます。この作業には、アプリケーションの Web.config ファイルで暗号化キーを再定義できないようにすることが含まれます。

メンバシップ データ ソースへの接続の保護

接続文字列

データベース サーバーへの安全な接続を維持するには、プロテクト構成を使用して構成ファイルで接続文字列情報を暗号化する必要があります。詳細については、「保護された構成を使用した構成情報の暗号化」を参照してください。

統合セキュリティを使用した SQL Server への接続

接続文字列が危険にさらされ、ユーザー ID とパスワードが公開される可能性を回避するには、統合セキュリティを使用して SQL Server を実行しているコンピュータに接続する必要があります。統合セキュリティを使用する接続を指定して、SQL Server を実行するコンピュータに接続すると、メンバシップ機能はプロセスの ID に戻ります。ASP.NET を実行しているプロセス (アプリケーション プールなど) の ID が既定のプロセス アカウントまたは制限付きのユーザー カウントであることを確認する必要があります。詳細については、「ASP.NET の偽装」を参照してください。

SQL Server データベースへのアクセス許可

メンバシップのユーザー情報を格納するための SQL Server データベースには、必要な機能と参照範囲だけにユーザー アクセスを制限できるデータベース ロールとビューが含まれるようにします。SQL Server メンバシップ データベースに接続するユーザー ID には、必要最小限の権限を割り当てます。詳細については、「SQL Server 向けアプリケーション サービス データベースのロールとビュー」を参照してください。

SQL Server Express ワーカー プロセス ID

SQL Server Express 2005 は、接続ユーザーの ID として動作するワーカー プロセスを起動できる新しい操作モードを搭載しています。この機能は、"実行時のユーザー" モードと呼ばれます。この操作モードは、IIS を使用したデスクトップ開発には適していますが、信頼されていない、複数のカスタマ コードベースをホストする Web サーバーでワーカー プロセスを起動するのは適切ではありません。相互に信頼されないアプリケーションを含む共有ホスト サーバーでは、"実行時のユーザー" 機能を明示的に無効にする必要があります。この機能を無効にするには、SQL Express インスタンス (osql –E –S .\sqlexpress など) に接続し、次の Transact-SQL コマンドを発行します。

EXEC sp_configure 'show advanced option', '1'

GO

RECONFIGURE WITH OVERRIDE

GO

EXEC sp_configure 'user instances enabled', 0

GO

RECONFIGURE WITH OVERRIDE

GO

メンバシップを使用する Web ページの保護

ログオン ページなど、重要情報を処理するアプリケーション ページは、標準の Web セキュリティ メカニズムを使用して保護する必要があります。このメカニズムには、SSL (Secure Sockets Layer) を使用する、ユーザー情報の更新やユーザーの削除のような重要な操作を行うときにユーザーのログオンを求めるなどの措置があります。

さらに、パスワードや場合によってはユーザー名などの機密機能データがクリア テキストでページに公開されないようにする必要があります。このような情報を表示するページには SSL を使用し、認証されたユーザーのみが閲覧できるようにします。また、機密機能データを Cookie に格納したり、セキュリティで保護されていない接続を通じて送信したりしないようにします。

サービス拒否攻撃に対するセキュリティ

更新や大規模な検索操作を実行するメソッドを複数のクライアントが同時に呼び出すと、メンバシップ データ ソースの応答性が低下する可能性があります。サービス拒否攻撃を受ける可能性を最小限に抑えるには、データベースの更新や検索を実行するメソッドを使用する ASP.NET ページへのアクセスを管理ユーザーに制限し、一般的な目的のための検証およびパスワード管理を提供する ASP.NET ページだけを公開します。

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

例外

機密情報が望ましくないソースに公開されることを防ぐには、詳細なエラー情報を表示しないようにするか、またはクライアントが Web サーバーそのものであるときだけ詳細なエラー メッセージ情報を表示するように、アプリケーションを構成する必要があります。詳細については、「customErrors 要素 (ASP.NET 設定スキーマ)」を参照してください。

[イベント ログ]

サーバーが Windows Server 2003 を実行している場合、イベント ログをセキュリティ保護したり、イベント ログのサイズや保持期間などのパラメータを設定したりすることによってアプリケーションのセキュリティを強化し、アプリケーションに対する間接的なサービス拒否攻撃を防ぐことができます。

状態監視

ASP.NET の状態監視機能を使用すると、成功したログオン試行と失敗したログオン試行が記録されます。既定の構成では、ログオン試行が失敗すると、ユーザー名とその他の診断情報が [アプリケーション] イベント ログに記録されます。イベント ログへのアクセスは、この情報の機密性を確保するために制限します。

カスタム メンバシップ プロバイダ

カスタムのメンバシップ プロバイダを作成する場合は、セキュリティ上の推奨事項に従って、データベースの操作時の SQL インジクション攻撃などの攻撃を回避します。カスタムのメンバシップ プロバイダを利用する場合は、セキュリティ上の推奨事項に従ってプロバイダを必ず点検します。

カルチャに依存した文字の操作

SQL Server のメンバシップ プロバイダまたはカスタムのメンバシップ プロバイダを使用する場合、カルチャに依存した形式でメンバシップ データを格納するようにデータ ソースを構成することがあります。ただし、ASP.NET は、カルチャに依存しないメンバシップ データ ストアの承認の構成要素とユーザー名からユーザー名を評価します。したがって、ユーザー名がカルチャに依存しない扱いの場合、承認済みユーザーの名前と同じなので、未認証のユーザーに承認を許可されます。

ユーザーが未承認のアクセス権を取得しないように、カルチャに依存しないと評価されるときにユーザー名が一意になるようにします。または、承認の構成要素を使用して承認のロール名のみを指定してから、カルチャに依存しないと評価される場合にロール名が一意であることを確認します。ロールの作成と管理は管理者機能として制限される可能性があるため、多くの場合、ロール名を使用して承認を指定する方が推奨されます。

参照

その他の技術情報

メンバシップを使用したユーザーの管理