セキュリティに関する注意点
このトピックでは、SQL Server Driver for PHP を使用するアプリケーションについて、アプリケーションを開発、配置、および実行する際のセキュリティに関する注意点を説明します。SQL Server のセキュリティの詳細については、「SQL Server 2005 のセキュリティ (英語)」または「SQL Server 2008 のセキュリティ (英語)」を参照してください。
Windows 認証を使用して接続する
次の理由により、SQL Server への接続には、可能な限り Windows 認証を使用する必要があります。
- 認証時に、資格情報がネットワーク経由で転送されない。 ユーザー名およびパスワードは、データベース接続文字列に埋め込まれません。つまり、悪意のあるユーザーまたは攻撃者が、ネットワークを監視したり、構成ファイル内の接続文字列を閲覧したりすることにより、資格情報を入手することはできません。
- ユーザーのアカウントを集中管理できる。 パスワード有効期限、パスワードの最小文字数、複数回の無効なログオン要求後のアカウント ロックアウトなどのセキュリティ ポリシーが適用されます。
Windows 認証を使用してサーバーに接続する方法の詳細については、「Windows 認証を使用して接続する方法」を参照してください。
Windows 認証を使用して接続する場合は、SQL Server で Kerberos 認証プロトコルを使用できるように環境を構成することをお勧めします。詳細については、「SQL Server 2005 のインスタンスへのリモート接続を作成するときに、Kerberos 認証を使用していることを確認する方法」または「Kerberos 認証と SQL Server」を参照してください。
機密データの送信時は暗号化接続を使用する
機密データを SQL Server に送信したり SQL Server から取得したりする際は、必ず暗号化接続を使用してください。暗号化接続を有効にする方法の詳細については、「データベース エンジンへの暗号化接続を有効にする方法 (SQL Server 構成マネージャ)」を参照してください。SQL Server Driver for PHP とのセキュリティで保護された接続を確立するには、サーバーへの接続時に Encrypt 接続属性を使用します。接続属性の詳細については、「sqlsrv_connect」を参照してください。
パラメータ化されたクエリを使用する
SQL インジェクション攻撃の危険性を軽減するために、パラメータ化されたクエリを使用してください。パラメータ化されたクエリの実行例については、「パラメーター化されたクエリを実行する方法」、「単一のクエリを実行する方法」、および「クエリを複数回実行する方法」を参照してください。
SQL インジェクション攻撃とそれに関連するセキュリティ上の注意事項の詳細については、「SQL インジェクション」を参照してください。
エンド ユーザーからのサーバー情報または接続文字列情報を受け入れない
アプリケーションを作成する際は、エンド ユーザーがサーバー情報または接続文字列情報をアプリケーションに送信できないようにしてください。サーバー情報および接続文字列情報に対する厳格な管理を維持することで、外部からの悪意のある活動を防ぐことができます。
アプリケーションの開発中は WarningsAsErrors をオンにする
ドライバによって発行された警告がエラーとして処理されるよう、WarningsAsErrors 設定を true にした状態でアプリケーションを開発するようにしてください。この設定により、アプリケーションを導入する前に警告に対処することが可能になります。詳細については、「エラーおよび警告の処理」を参照してください。
導入されたアプリケーションに関するログのセキュリティを確保する
導入されたアプリケーションについて、ログが安全な場所に書き込まれていること、またはログ機能がオフになっていることを確認してください。これにより、ログ ファイルに書き込まれた情報にエンド ユーザーがアクセスできてしまう可能性を排除できます。詳細については、「アクティビティのログ記録」を参照してください。