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”。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。