CodeQL 文档

不安全的临时文件

ID: py/insecure-temporary-file
Kind: problem
Security severity: 7.0
Severity: error
Precision: high
Tags:
   - external/cwe/cwe-377
   - security
Query suites:
   - python-code-scanning.qls
   - python-security-extended.qls
   - python-security-and-quality.qls

单击以查看 CodeQL 存储库中的查询

创建临时文件名(如tempfile.mktempos.tempnam)的函数从根本上来说是不安全的,因为它们不能确保对具有返回的临时名称的文件的独占访问。这些函数返回的文件名保证在创建时是唯一的,但必须在单独的操作中打开文件。无法保证创建和打开操作会原子地发生。这为攻击者在打开文件之前干扰文件提供了机会。

请注意,自 Python 2.3 以来mktemp已被弃用。

建议

mktemp的使用替换为tempfile模块中一些更安全的函数,例如TemporaryFile。如果文件旨在从其他进程访问,请考虑使用NamedTemporaryFile函数。

示例

以下代码片段打开一个临时文件并向其中写入一组结果。由于文件名是使用mktemp创建的,因此另一个进程可能在使用open打开文件之前访问此文件。

from tempfile import mktemp

def write_results(results):
    filename = mktemp()
    with open(filename, "w+") as f:
        f.write(results)
    print("Results written to", filename)

通过将代码更改为使用NamedTemporaryFile,文件将立即打开。

from tempfile import NamedTemporaryFile

def write_results(results):
    with NamedTemporaryFile(mode="w+", delete=False) as f:
        f.write(results)
    print("Results written to", f.name)

参考

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