禁用证书验证¶
ID: js/disabling-certificate-validation
Kind: problem
Security severity: 7.5
Severity: error
Precision: very-high
Tags:
- security
- external/cwe/cwe-295
- external/cwe/cwe-297
Query suites:
- javascript-code-scanning.qls
- javascript-security-extended.qls
- javascript-security-and-quality.qls
证书验证是安全 TLS 连接的标准身份验证方法。没有它,就无法保证 TLS 连接的另一方是谁,从而使中间人攻击更容易发生。
在测试使用 TLS 连接的软件时,暂时禁用证书验证可能很有用。但是,强烈建议不要在生产环境中禁用它,除非使用其他身份验证方法。
建议¶
不要禁用 TLS 连接的证书验证。
示例¶
以下示例显示了一个 HTTPS 连接,该连接将机密信息传输到远程服务器。但连接不安全,因为连接的rejectUnauthorized
选项被设置为false
。因此,任何人都可以冒充远程服务器并接收机密信息。
let https = require("https");
https.request(
{
hostname: "secure.my-online-bank.com",
port: 443,
method: "POST",
path: "send-confidential-information",
rejectUnauthorized: false // BAD
},
response => {
// ... communicate with secure.my-online-bank.com
}
);
为了使连接安全,rejectUnauthorized
选项应具有其默认值,或者显式设置为true
。
参考资料¶
维基百科:传输层安全 (TLS)
维基百科:中间人攻击
Node.js:TLS (SSL)
常见弱点枚举:CWE-295.
常见弱点枚举:CWE-297.