不进行证书验证的请求¶
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
加密是大多数(如果不是全部)在线通信安全性的关键。使用传输层安全 (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)