3gw*_*ain 12 javascript sonarqube ecmascript-2016
当我声明一个变量时,例如:
const FileId = Math.random().toString(36).substr(2, 9);
Run Code Online (Sandbox Code Playgroud)
我在声纳中收到此错误:
确保在这里使用这个伪随机数生成器是安全的。
我应该如何解决这个问题?我的代码有什么问题吗?
谁能帮我?
mpl*_*jan 14
他们想提醒您这样一个事实:Math.random 不是真正的随机生成器,而是PRNG。如果您需要它的安全性,您需要CSPRNG。
使用伪随机数生成器 (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);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
27384 次 |
最近记录: |