説明
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接続の暗号化を要求してサーバー証明書を検証してください。