tmpnam 的替代品有多不安全?

发布于 2024-08-10 07:33:02 字数 563 浏览 6 评论 0原文

我考虑使用 tmpnam 来设置 QPrinter 的输出文件名。但Python 文档建议不要使用它。

os.tmpnam()

返回一个对于创建临时文件来说合理的唯一路径名 文件。 ...应用程序负责 为了正确创建和管理 使用返回的路径创建的文件 tmpnam();没有自动清理 提供。

<块引用>

警告

使用 tmpnam() 容易受到符号链接攻击;考虑使用 tmpfile()(文件对象部分 创建)代替。

Windows:微软的 始终执行 tmpnam() 在根目录中创建一个名称 当前驱动器的,那就是 一般来说,临时工的位置很差 文件(根据权限,您可以 甚至无法使用打开文件 这个名字)。

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

I considered using tmpnam to set the output file name of a QPrinter. But the Python documentation recommends against using it.

os.tmpnam()

Return a unique path name that is reasonable for creating a temporary
file. ... Applications are responsible
for properly creating and managing
files created using paths returned by
tmpnam(); no automatic cleanup is
provided.

Warning

Use of tmpnam() is vulnerable to symlink attacks; consider using
tmpfile() (section File Object
Creation) instead.

Windows: Microsoft’s
implementation of tmpnam() always
creates a name in the root directory
of the current drive, and that’s
generally a poor location for a temp
file (depending on privileges, you may
not even be able to open a file using
this name).

  • Is this really insecure if my application doesn't need any special privileges?
  • What are secure alternatives considering that I can only set a path as the output file name of the QPrinter?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

只是偏爱你 2024-08-17 07:33:02

根据 QPrinter 处理已存在文件的方式,您可以使用 QTemporaryFile 创建文件,然后关闭该文件并保留对 QTemporaryFile 对象的引用,直到完成为止。 (当您销毁对象时,这也会为您清理文件。)

Depending on how your QPrinter deals with a file that already exists, you could use QTemporaryFile to create a file, then close the file and keep the reference to the QTemporaryFile object around until you are done with it. (This will also clean up the file for you when you destroy the object.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文