无证书验证的请求¶
ID: rb/request-without-cert-validation
Kind: problem
Security severity: 7.5
Severity: warning
Precision: medium
Tags:
- security
- external/cwe/cwe-295
Query suites:
- ruby-security-extended.qls
- ruby-security-and-quality.qls
证书验证是安全 TLS 连接的标准身份验证方法。如果没有证书验证,就无法保证 TLS 连接的另一方是谁,这使得中间人攻击更容易发生。
在测试使用 TLS 连接的软件时,可能需要暂时禁用证书验证。但强烈建议不要在生产环境中禁用证书验证,除非使用了替代的身份验证方法。
建议¶
不要禁用 TLS 连接的证书验证。
示例¶
以下示例展示了建立 HTTPS 连接以向远程服务器发出 GET 请求。但连接并不安全,因为连接的 verify_mode
选项被设置为 OpenSSL::SSL::VERIFY_NONE
。因此,任何人都可以假冒远程服务器。
require "net/https"
require "uri"
uri = URI.parse "https://example.com/"
http = Net::HTTP.new uri.host, uri.port
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Get.new uri.request_uri
puts http.request(request).body
要使连接安全,verify_mode
选项应使用默认值,或显式设置为 OpenSSL::SSL::VERIFY_PEER
。
参考资料¶
维基百科:传输层安全 (TLS)
维基百科:中间人攻击
Ruby 文档:Net::HTTP
常见弱点枚举:CWE-295.