/tmpnam/有多不安全?替代方案是什么?

1 投票
2 回答
1853 浏览
提问于 2025-04-15 15:41

我考虑过用 tmpnam 来设置 QPrinter 的输出文件名。但Python的文档不推荐这样做。

os.tmpnam()

这个函数会返回一个独特的路径名,适合用来创建临时文件。... 应用程序需要负责正确创建和管理使用 tmpnam() 返回的路径创建的文件;系统不会自动清理这些文件。

警告

使用 tmpnam() 存在被符号链接攻击的风险;建议使用 tmpfile()(文件对象创建部分)作为替代。

在Windows上:微软实现的 tmpnam() 总是会在当前驱动器的根目录下创建文件名,而这个位置通常不适合存放临时文件(根据权限的不同,你甚至可能无法用这个名字打开文件)。

  • 如果我的应用程序不需要任何特殊权限,这样真的不安全吗?
  • 考虑到我只能设置 QPrinter 的输出文件名路径,有什么安全的替代方案吗?

2 个回答

0

根据你的QPrinter如何处理已经存在的文件,你可以使用QTemporaryFile来创建一个文件。创建后,关闭这个文件,并保留对QTemporaryFile对象的引用,直到你用完它为止。这样,当你销毁这个对象时,它会自动帮你清理这个文件。

7

请查看这个链接:http://docs.python.org/library/tempfile.html

用这个来代替吧。

撰写回答