CodeQL 文档

无证书验证的请求

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

点击查看 CodeQL 代码库中的查询

证书验证是安全 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

参考资料

  • ©GitHub, Inc.
  • 条款
  • 隐私