使用 java.io.File.createTempFile 时出现 Veracode 不安全临时文件错误

Posted

技术标签:

【中文标题】使用 java.io.File.createTempFile 时出现 Veracode 不安全临时文件错误【英文标题】:Veracode Insecure Temporary File error when using java.io.File.createTempFile 【发布时间】:2015-09-24 08:10:12 【问题描述】:

我需要创建一个临时文件并将一些数据存储到其中。为此,我编写了以下代码:

import org.apache.commons.lang.RandomStringUtils;
import java.security.SecureRandom;

[...]

String random = RandomStringUtils.random(10, 0, 0, true, true, null, new SecureRandom());
File tempFile = File.createTempFile("PREFIX-" + random, ".pdf");

[...]

它运行良好,但是当我将此代码提交给 Veracode 时,我收到“不安全的临时文件 (CWE ID 377)”错误。 我认为使用SecureRandom 会使临时文件名无法被攻击者预测。

在不让 Veracode 不开心的情况下生成临时文件的正确方法是什么?

【问题讨论】:

你试过Files.createTempFile吗? 我会试一试并告诉你。 Files.createTempFile() 是否解决了 Veracode 的问题? 不幸的是它没有。还是同样的问题。 @D.PETIT 你找到合适的替代品了吗? 【参考方案1】:

使用 CreateTemp 文件(在较低版本的 java 中)创建文件时,它将首先创建一个具有给定后缀和前缀以及随机数的文件名。格式--> 前缀+随机数+后缀。如果生成的名称已经存在,它只会增加随机数。这就是算法中的问题,v 可以猜测下一个文件名是什么。

这个问题在 Java 6 中得到了解决。但是如果你在 veracode 中进行静态扫描,它们仍然会将其显示为错误,因为它们会在低于 6 的 Java 版本中导致易受攻击的问题。如果你使用的是更高版本,那就没问题了。跳过它..

来自veracode的参考:https://www.veracode.com/blog/2009/01/how-boring-flaws-become-interesting

【讨论】:

【参考方案2】:

我认为这个问题在 Java 6 Update 11 版本中得到了解决。使用最新版本的 Java。

【讨论】:

以上是关于使用 java.io.File.createTempFile 时出现 Veracode 不安全临时文件错误的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)