可预测的伪随机数

可预测的伪随机数

SonarQube代码质量检查

在某些对安全性要求比较高的情况下,如果使用了可预测的伪随机数,可能会导致安全漏洞。

比如,当可预测的伪随机数作为以下用途时:

  • CSRF令牌(token):如果CSRF令牌的值可预测的话,则攻击者可以发动CSRF(Cross-Site Request Forgery,跨站点伪造请求)攻击。

  • 通过email发送的密码重置令牌:可预测的密码令牌可能会导致账号盗用攻击,因为攻击者可以猜出修改密码的URL形式。

  • 其它需要保密的值

不安全的代码示例(JAVA)

String generateSecretToken() {Random r = new Random();return Long.toHexString(r.nextLong());}

修复方案

import
 org.apache.commons.codec.binary.Hex;String generateSecretToken() 
{SecureRandom secRandom = new SecureRandom();byte[] result = new 
byte[32];secRandom.nextBytes(result);return 
Hex.encodeHexString(result);}

快速修复的方法就是用安全的随机数生成器如java.security.SecureRandom替换java.util.Random