Python 中 str.lower() 竟成安全漏洞

When str.lower() is a security vulnerability in Python – Seth Larson

Python 中 str.lower() 竟成安全漏洞

在 Python 中,看似无害的 str.lower() 函数竟可能引发安全漏洞。问题源于 IDNA 2003 标准对 Unicode 3.2.0 的严格依赖,而 str.lower() 使用的是当前 Python 解释器内置的最新 Unicode 数据。这导致在不同版本下,字符大小写转换结果不一致,从而破坏了 RFC 3454 的规范一致性。例如,字符 'Ꭰ' 在不同 Unicode 版本下编码结果不同,可能引发域名解析错误或安全绕过。修复方案是通过构建例外表,强制 str.lower() 在特定场景下模拟 Unicode 3.2.0 的行为。这一漏洞由 Bitshift 发现,并由多位开发者协作修复,最终被记录为 CVE-2026-17084。

str.lower() 调用之所以成为漏洞,是因为它使用了 Python 解释器自带的 Unicode 数据,而非 RFC 3454 所要求的固定版本 Unicode 3.2.0。

同日更多故事

2026-08-25