可预测的伪随机数
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