安全でないSQL接続

C#のSQL接続での通信保護の無効化

説明

SQL Serverのクライアントが通信全体の暗号化を要求しなかったり、サーバー証明書の検証を省略したりすると、データベースの通信がネットワーク上の攻撃者に漏えいするおそれがあります。Encrypt=False でもサーバーが暗号化を強制する場合があるため、実際の保護を判断する際はサーバー設定とドライバーのバージョンも確認してください。

想定される影響

  • 中間者攻撃による、データベース認証情報やクエリ結果の漏えい、改ざん。

対処方法

Encrypt=true を使用し、サーバー証明書を検証してください。一時的な開発環境を除き、Encrypt=false や TrustServerCertificate=true は使用しないでください。

例

変更前

csharp
using var connection = new SqlConnection(
    "Server=db;Database=App;Encrypt=False");

変更後

csharp
using var connection = new SqlConnection(
    "Server=db;Database=App;Encrypt=True;TrustServerCertificate=False");

解説:

  • 変更前: Encrypt=False は、クライアントが通信全体の暗号化を要求しない設定です。実際の保護は、サーバーの暗号化強制設定やドライバーによって異なります。
  • 変更後: Encrypt=false や TrustServerCertificate=true を設定せず、SQL接続の暗号化を要求してサーバー証明書を検証してください。

参考資料