接続情報の保護Protecting Connection Information

アプリケーションのセキュリティを実現するうえで、データ ソースへのアクセスを保護することは、最も重要な目標の 1 つです。Protecting access to your data source is one of the most important goals when securing an application. 保護されていない接続文字列は脆弱性を招く原因になります。A connection string presents a potential vulnerability if it is not secured. 接続情報をテキスト形式で保存したり、メモリ内に保持したりすると、システム全体のセキュリティが損なわれる可能性があります。Storing connection information in plain text or persisting it in memory risks compromising your entire system. ソースコードに埋め込まれている接続文字列は、 Ildasm.exe (IL 逆アセンブラーを使用して読み取って、コンパイルされたアセンブリに Microsoft 中間言語 (MSIL) を表示できます。Connection strings embedded in your source code can be read using the Ildasm.exe (IL Disassembler) to view Microsoft intermediate language (MSIL) in a compiled assembly.

接続文字列に関係したセキュリティ上の脆弱性は、使用されている認証の種類、メモリやディスクへの接続文字列の保存方法、実行時に接続文字列を作成する際の手法などから発生します。Security vulnerabilities involving connection strings can arise based on the type of authentication used, how connection strings are persisted in memory and on disk, and the techniques used to construct them at run time.

Windows 認証の使用Use Windows Authentication

データ ソースへのアクセスを制限するには、ユーザー ID、パスワード、データ ソース名などの接続情報をセキュリティで保護する必要があります。To help limit access to your data source, you must secure connection information such as user ID, password, and data source name. ユーザー情報が公開されないようにするために、可能な限り Windows 認証 (統合セキュリティとも呼ばれる) を使用することをお勧めします。In order to avoid exposing user information, we recommend using Windows authentication (sometimes referred to as integrated security) wherever possible. Windows 認証は、接続文字列に Integrated Security キーワードまたは Trusted_Connection キーワードを使用することによって指定できます。こうすることで、ユーザー ID とパスワードを使う必要がなくなります。Windows authentication is specified in a connection string by using the Integrated Security or Trusted_Connection keywords, eliminating the need to use a user ID and password. Windows 認証を使用した場合、ユーザーは Windows によって認証され、サーバー リソースやデータベース リソースへのアクセスは Windows のユーザーおよびグループに付与された権限によって制御されます。When using Windows authentication, users are authenticated by Windows, and access to server and database resources is determined by granting permissions to Windows users and groups.

Windows 認証が使用できない場合、ユーザーの資格情報を接続文字列に含めることになるため、十分な注意が必要です。For situations where it is not possible to use Windows authentication, you must use extra care because user credentials are exposed in the connection string. ASP.NET アプリケーションでは、Windows アカウントを、データベースやその他のネットワーク リソースに接続する際の固定 ID として構成できます。In an ASP.NET application, you can configure a Windows account as a fixed identity that is used to connect to databases and other network resources. Web.config ファイルでidentity 要素の権限借用を有効にし、ユーザー名とパスワードを指定します。You enable impersonation in the identity element in the web.config file and specify a user name and password.

<identity impersonate="true"   
        userName="MyDomain\UserAccount"   
        password="*****" />  

固定 ID アカウントには、権限の低いアカウント、つまり、データベースに対する必要な権限だけが付与されたアカウントを使用してください。The fixed identity account should be a low-privilege account that has been granted only necessary permissions in the database. さらに、ユーザー名とパスワードがクリア テキストで表示されないよう、構成ファイルを暗号化する必要があります。In addition, you should encrypt the configuration file so that the user name and password are not exposed in clear text.

OleDbConnection の接続文字列を UDL (Universal Data Link) ファイルに保存することは避けてください。Avoid storing connection strings for an OleDbConnection in a Universal Data Link (UDL) file. UDL はクリア テキストで保存され暗号化できません。UDLs are stored in clear text and cannot be encrypted. UDL ファイルは、アプリケーションにとって外部ファイルをベースにしたリソースであるため、.NET Framework ではセキュリティ保護も暗号化もされません。A UDL file is an external file-based resource to your application, and it cannot be secured or encrypted using the .NET Framework.

接続文字列ビルダーを使用したインジェクション攻撃の防止Avoid Injection Attacks with Connection String Builders

ユーザー入力から文字列を動的に連結することによって接続文字列を構築している場合、接続文字列のインジェクション攻撃を受ける可能性があります。A connection string injection attack can occur when dynamic string concatenation is used to build connection strings based on user input. ユーザー入力の検証や悪意のある文字のエスケープを怠ると、機密データなど、サーバー上のリソースへのアクセスを攻撃者に許してしまうことも考えられます。If the user input is not validated and malicious text or characters not escaped, an attacker can potentially access sensitive data or other resources on the server. こうした問題を解消するために、ADO.NET 2.0 では、接続文字列の構文を検証し、余分なパラメーターの追加を防ぐ新しい接続文字列ビルダー クラスが導入されました。To address this problem, ADO.NET 2.0 introduced new connection string builder classes to validate connection string syntax and ensure that additional parameters are not introduced. 詳細については、「接続文字列ビルダー」をご覧ください。For more information, see Connection String Builders.

Persist Security Info=False の使用Use Persist Security Info=False

Persist Security Info の既定値は false です。すべての接続文字列には、この既定値を使用することをお勧めします。The default value for Persist Security Info is false; we recommend using this default in all connection strings. Persist Security Infotrue または yes に設定すると、ユーザー ID やパスワードなどのセキュリティ関連情報を、接続を開いた後にその接続から取得できます。Setting Persist Security Info to true or yes allows security-sensitive information, including the user ID and password, to be obtained from a connection after it has been opened. Persist Security Infofalse または no に設定した場合、その情報を使って接続を開いた後で、セキュリティ情報が破棄されるため、信頼できないソースによってセキュリティ関連情報がアクセスされることを確実に防ぐことができます。When Persist Security Info is set to false or no, security information is discarded after it is used to open the connection, ensuring that an untrusted source does not have access to security-sensitive information.

構成ファイルの暗号化Encrypt Configuration Files

接続文字列は構成ファイルに保存することもでき、そうすることで、アプリケーションのコードに接続文字列を組み込むことを避けられます。You can also store connection strings in configuration files, which eliminates the need to embed them in your application's code. 構成ファイルは、.NET Framework が基本的な要素を定義するために使用する標準的な XML ファイルです。Configuration files are standard XML files for which the .NET Framework has defined a common set of elements. 構成ファイル内の接続文字列は、通常、Windowsアプリケーションの場合は app.config の <connectionStrings > 要素、ASP.NET アプリケーションの場合は web.config ファイルに格納されます。Connection strings in configuration files are typically stored inside the <connectionStrings> element in the app.config for a Windows application, or the web.config file for an ASP.NET application. 構成ファイルからの接続文字列の格納、取得、および暗号化の基本の詳細については、「接続文字列と構成ファイル」を参照してください。For more information on the basics of storing, retrieving and encrypting connection strings from configuration files, see Connection Strings and Configuration Files.

関連項目See also