不安全的 SQL 连接¶
ID: cs/insecure-sql-connection
Kind: path-problem
Security severity: 7.5
Severity: error
Precision: medium
Tags:
- security
- external/cwe/cwe-327
Query suites:
- csharp-security-extended.qls
- csharp-security-and-quality.qls
如果 SQL Server 连接的客户端未强制执行传输加密,则容易受到多种攻击,包括中间人攻击,这可能会危及用户凭据和/或 TDS 会话。
建议¶
通过在连接字符串中将 Encrypt
选项设置为 true
,确保客户端代码强制执行该选项。
示例¶
以下示例显示了一个 SQL 连接字符串,该字符串未显式启用 Encrypt
设置来强制加密。
using System.Data.SqlClient;
// BAD, Encrypt not specified
string connectString =
"Server=1.2.3.4;Database=Anything;Integrated Security=true;";
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString);
var conn = new SqlConnection(builder.ConnectionString);
以下示例显示了一个 SQL 连接字符串,该字符串显式启用了 Encrypt
设置来强制执行传输加密。
using System.Data.SqlClient;
string connectString =
"Server=1.2.3.4;Database=Anything;Integrated Security=true;;Encrypt=true;";
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString);
var conn = new SqlConnection(builder.ConnectionString);
参考资料¶
Microsoft,SQL 协议博客:选择性地使用与 SQL Server 的安全连接。
Microsoft:SqlConnection.ConnectionString 属性。
Microsoft:将连接字符串关键字与 SQL Server 本机客户端一起使用。
Microsoft:设置连接属性。
常见弱点枚举:CWE-327。