6

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

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 不高兴的情况下生成临时文件的正确方法是什么?

4

2 回答 2

2

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

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

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

于 2017-04-10T10:37:57.810 回答
0

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

于 2017-01-18T03:37:38.033 回答