【问题标题】:Make sure that using this pseudorandom number generator is safe here确保在这里使用这个伪随机数生成器是安全的
【发布时间】:2020-09-14 02:30:29
【问题描述】:

当我声明一个变量时:

const FileId = Math.random().toString(36).substr(2, 9);

我在 Sonar 中收到此错误:

确保在这里使用这个伪随机数生成器是安全的。

我应该如何解决这个问题?我的代码有什么问题?

谁能帮帮我?

【问题讨论】:

  • @mplungjan - 你能更新我的回答代码吗?

标签: javascript sonarqube ecmascript-2016


【解决方案1】:

他们想提醒您 Math.random 不是真正的随机生成器,而是PRNG。如果您需要确保安全,您需要CSPRNG

Here is the spec

使用伪随机数生成器 (PRNG) 具有安全敏感性

当软件在需要不可预测性的上下文中生成可预测的值时,攻击者可能会猜测将要生成的下一个值,并使用该猜测来冒充其他用户或访问敏感信息。

由于 Math.random() 函数依赖于弱伪随机数生成器,因此此函数不应用于安全关键型应用程序或保护敏感数据。在这种情况下,应使用强加密伪随机数生成器 (CSPRNG)。

问问自己是否

  • 使用生成值的代码要求它是不可预测的。对于所有加密机制或对密码等秘密值进行哈希处理时都是这种情况。
  • 您使用的函数会生成一个可以预测的值(伪随机)。
  • 生成的值被多次使用。
  • 攻击者可以访问生成的值。

如果您对第一个问题和以下任何问题的回答为“是”,您将面临风险。

代码示例

const crypto = window.crypto || window.msCrypto;
var array = new Uint32Array(1);
crypto.getRandomValues(array); // Compliant for security-sensitive use cases
const FileId = array[0];
console.log(FileId);

【讨论】:

    猜你喜欢
    • 2018-10-25
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多