使用python tempfile.NamedTemporaryFile的方式安全吗?
这个问题是在问,使用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的目录中创建文件,并且这个目录是你自己的,只有你可以读写,那么你就不需要担心文件的安全性,因为这个目录里的任何东西都是受到保护的。