这种使用Python的tempfile.NamedTemporaryFile方法安全吗?

3

这种使用Python的tempfile.NamedTemporaryFile安全吗(即是否不涉及已弃用的tempfile.mktemp的安全问题)?

def mktemp2():
    """Create and close an empty temporary file.
    Return the temporary filename"""
    tf = tempfile.NamedTemporaryFile(delete=False)
    tfilename = tf.name
    tf.close()
    return tfilename

outfilename = mktemp2()
subprocess.call(['program_name','-o',outfilename])

我需要运行一个外部命令,其中一个参数是输出文件名。如果该文件已经存在,则会无警告地覆盖它。我想使用临时文件,因为我只需要读取其内容,而不需要它以后的使用。


这完全正确。实际上,这几乎就是在这里提供的库文档中的代码:http://docs.python.org/library/tempfile.html#tempfile.mktemp。既然你已经从文档中复制并粘贴了,那你在问什么?为什么要问你是否正确地复制和粘贴了呢? - S.Lott
1
嗯,你说得对,文档中确实有这个函数,但是文档中的句子"mktemp()的使用可以轻松地用NamedTemporaryFile()来替换,只需传递delete=False参数"并没有明确说明这个“替换”是安全的(但是,我想这就是它应该意味着的... 由于这是一个安全问题,所以我决定再次确认。而gnibbler对我的问题的另一个答案则表示它确实是不安全的,因此对于这个问题存在一些不确定性... - jan
1个回答

4

非常不安全。攻击者有机会在子进程打开文件之前,使用相同的名称创建具有任意权限(或符号链接)的文件。

如果您可以在除了/tmp之外的只能由您的进程拥有和读/写的目录中创建该文件,则无需关注文件的安全性,因为目录中的所有内容都受到保护。


使用outfilename = tempfile.mkstemp()[1]代替我的mktemp2函数怎么样? - jan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接