SV.RANDOM
初始化类型“java.util.Random”的对象时将出现此错误。
漏洞与风险
使用“java.util.Random”可产生很容易预测的结果。如果 Random 的两个实例使用方法调用的相同种子和序列进行创建,它们将生成完全相同的结果。
Klocwork 安全漏洞 (SV) 检查器可识别可能创建危险数据的调用;这些调用被视为不安全的来源。用户所提供的任何数据都可能是不安全的来源,因为用户可能是攻击者,或者可能引入人为错误。
缓解与预防
请使用“java.security.SecureRandom”替代。此类提供加密型强随机数生成程序。SecureRandom 仍然使用 PRNG,这表示它们正在使用确定性算法从真正的随机种子中产生伪随机数。SecureRandom 将产生非确定性输出。
示例 1
复制
public String generateRandomSessionId() {
Random random = new Random();
random.setSeed(System.currentTimeMillis());
return ("sessionId=" + random.nextInt(2000000000));
}
public String generateRandomNumberUsingMath() {
double randomNum = Math.random();
return (String.valueOf(randomNum));
}
针对第 13 和 18 行报告 SV.RANDOM:使用了不安全的随机数生成程序“Random”。