CodeQL 文档

不进行证书验证的请求

ID: py/request-without-cert-validation
Kind: problem
Security severity: 7.5
Severity: error
Precision: medium
Tags:
   - security
   - external/cwe/cwe-295
Query suites:
   - python-security-extended.qls
   - python-security-and-quality.qls

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

加密是大多数(如果不是全部)在线通信安全性的关键。使用传输层安全 (TLS) 可以确保通信不会被入侵者中断。因此,禁用 TLS 提供的验证是不明智的。requests 模块中的函数默认情况下提供验证,只有在使用 verify=False 显式关闭时,才会不进行验证。

建议

在进行请求时,绝不使用 verify=False

示例

该示例展示了对 semmle.com 的两次不安全的调用,以及各种安全的替代方案。

import requests

#Unsafe requests

requests.get('https://semmle.com', verify=False) # UNSAFE
requests.get('https://semmle.com', verify=0) # UNSAFE

#Various safe options

requests.get('https://semmle.com', verify=True) # Explicitly safe
requests.get('https://semmle.com', verify="/path/to/cert/")
requests.get('https://semmle.com') # The default is to verify.

#Wrapper to ensure safety

def make_safe_request(url, verify_cert):
    if not verify_cert:
        raise Exception("Trying to make unsafe request")
    return requests.get(url, verify_cert)

参考资料

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