ASP.NET を使用した機密情報の格納
更新 : 2007 年 11 月
ASP.NET アプリケーションでは、多くの場合、機密性の高い情報を取り扱う必要があります。たとえば、ユーザー ID とパスワードを使用してデータベースに接続することが必要になったり、顧客がアプリケーションへのアクセスに使用するユーザー ID とパスワードを格納したりする場合があります。SSL (Secure Sockets Layer) を使用するとネットワークを経由して渡す情報を暗号化できますが、その情報は、サーバーおよびクライアントで格納するときにも保護する必要があります。ここでは、機密情報を格納する場合のいくつかの一般的なガイドラインについて説明します。
メモ : |
---|
機密情報の格納の詳細については、MSDN Web サイトの「セキュリティ ガイダンス : 脅威とその対策」を参照してください。 |
可能なときは機密情報の格納を回避
アプリケーションで機密情報が公開されるの防ぐ最善の方法は、それを格納しないことです。機密情報を格納する場所をできる限り少なくします。ブラウザに保持される Cookie またはコントロールにアプリケーションの機密情報を格納することは避けます。これは、Cookie やコントロールは機密情報をアプリケーションのクライアントに公開するためです。アプリケーション ロジックには機密情報を格納しないようにします。代わりに、セキュリティで保護された構成場所またはクライアントから機密情報を取得します。
機密情報の暗号化
機密情報を格納するときには、人間が判読できるテキスト形式や、Base64 エンコーディングなどの簡単にデコードできる形式で格納しないようにします。機密情報は暗号化して、何らかの方法で攻撃者に公開された場合でも、機密情報が含まれているかどうかを攻撃者が簡単に判断できないようにします。
機密情報の検証のみが必要で、人間が判読できる形式に復号化する必要がない場合は、一方向のハッシュを使用して機密情報を暗号化します。その後、送信元から受け取った検証対象の機密情報を比較する場合に、受け取ったその値をハッシュ化して検証用のハッシュと比較します。たとえば、ASP.NET メンバシップとフォーム認証を使用してアプリケーションのユーザー認証を提供し、パスワードをデータ ソースに格納したり検証のために比較したりするときに、一方向のハッシュを使用してそれが暗号化されるように、パスワードの形式を Hashed に設定します。
接続文字列、ユーザー資格情報、暗号キーなどの機密情報をアプリケーション用の Web.config ファイル内に格納する場合は、保護された構成プロバイダを使用して Web.config ファイルの重要セクションを暗号化します。保護された構成の詳細については、「保護された構成を使用した構成情報の暗号化」を参照してください。
暗号化を使用して機密情報を保護する方法の詳細については、「.NET Framework の暗号モデル」を参照してください。
アクセス許可を使用した機密情報の保護
ファイル、データベース、レジストリなどの場所に機密情報を格納する場合は、NTFS アクセス制御リストおよびデータベースへのアクセス許可を使用して、その情報へのアクセスを必要なソースと必須アクセスのみに制限します。詳細については、ご使用のデータベースのマニュアルまたは「ASP.NET の必須アクセス制御リスト (ACL)」を参照してください。