使用python tempfile.NamedTemporaryFile的方式安全吗?

3 投票
1 回答
2130 浏览
提问于 2025-04-16 05:51

这个问题是在问,使用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])

我需要运行一个外部命令,这个命令需要一个输出文件名作为参数。如果这个文件名已经存在,它会直接覆盖掉那个文件,没有任何警告。我想用临时文件,因为我只需要读取它的内容,之后不需要这个文件了。

1 个回答

4

这个做法完全不安全。在文件被删除和被子进程打开之间,攻击者有机会用他们想要的权限(或者创建一个指向其他地方的链接)来创建同名的文件。

如果你能在一个不同于/tmp的目录中创建文件,并且这个目录是你自己的,只有你可以读写,那么你就不需要担心文件的安全性,因为这个目录里的任何东西都是受到保护的。

撰写回答