gpt4 book ai didi

mkstemp 的 java 等价物

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:33:31 30 4
gpt4 key购买 nike

Java 中有什么方法可以安全地写入临时文件吗?

据我所知,创建临时文件 (createTempFile) 的唯一方法实际上不会同时打开它,因此文件打开和文件写入之间存在竞争条件。我错过了什么吗?我在 UnixFileSystem.java 中找不到 createFileExclusively(String) 背后的 C 源代码,但我怀疑它真的能做任何事情,因为文件打开发生在创建临时文件后的 Java 代码中(除非它试图用文件锁?)。

问题

在创建临时文件和您打开它之间,恶意攻击者可能会取消链接该临时文件并将恶意内容放在那里。例如,攻击者可以创建命名管道来读取敏感数据。或者类似地,如果您最终通过读取文件来复制文件,那么命名管道可能会忽略所有写入的内容并提供要读取的恶意内容。

我记得在过去 10 多年里读过许多临时文件攻击的例子,这些例子利用了名称出现在命名空间中和文件实际打开之间的竞争条件。

希望缓解因素是 Java 正确设置了 umask,因此特权较低的用户无法读取/写入文件,通常/tmp 目录会正确限制权限,以便您无法执行取消链接攻击。

当然,如果您为被入侵的权限较低的用户所拥有的临时文件传递自定义目录,则该用户可能会对您进行取消链接攻击。该死的,有了 inotify,利用竞争条件可能比仅仅执行目录列表的强力循环更容易。

最佳答案

http://kurt.seifried.org/2012/03/14/creating-temporary-files-securely/

Java

使用 java.io.File.createTempFile() – 一些有趣的信息在 http://www.veracode.com/blog/2009/01/how-boring-flaws-become-interesting/

对于目录,在 How to create a temporary directory/folder in Java? 有一个有用的帖子

Java 7

对于文件使用 java.io.File.createTempFile()

目录使用 createTempDirectory()

http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html

关于mkstemp 的 java 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10201472/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com