Java中有什么方法可以安全地写入临时文件吗?
据我所知,创建临时文件(createTempFile)的唯一方法实际上并不同时打开它,因此文件打开和文件写入之间存在竞争条件。我错过了什么吗?我在 UnixFileSystem.java 中找不到 createFileExclusively(String) 背后的 C 源代码,但我怀疑它真的能做任何事情,因为文件打开发生在创建临时文件后的 Java 代码中(除非它尝试使用文件锁?)。
问题
在创建临时文件和打开它之间,恶意攻击者可能会取消该临时文件的链接并将恶意内容放在那里。例如,攻击者可以创建命名管道来读取敏感数据。或者类似地,如果您最终通过读取文件来复制文件,那么命名管道可能会忽略写入的所有内容并提供要读取的恶意内容。
我记得在过去 10 多年里读过许多临时文件攻击的示例,这些示例利用了名称出现在命名空间中和文件实际打开之间的竞争条件。
希望缓解因素是 Java 正确设置了 umask,因此权限较低的用户无法读取/写入该文件,并且通常 /tmp 目录会正确限制权限,以便您无法执行取消链接攻击。
当然,如果您传递一个由受威胁的低权限用户拥有的临时文件的自定义目录,则该用户可能会对您进行取消链接攻击。天哪,使用inotify,利用竞争条件可能比仅仅使用暴力循环来列出目录更容易。
http://kurt.seifried.org/2012/03/14/creating-temporary-files-securely/ 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/ http://www.veracode.com/blog/2009/01/how-boring-flaws-become-interesting/
对于目录,有一个有用的帖子:如何在Java中创建临时目录/文件夹? https://stackoverflow.com/questions/617414/create-a-temporary-directory-in-java
Java 7
对于文件使用 java.io.File.createTempFile()
对于目录使用 createTempDirectory()
http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)