cert-msc51-cpp¶
此检查会标记所有使用默认参数、常量表达式或任何用户可配置类型初始化或播种的伪随机数引擎、引擎适配器实例化和 srand()
。用可预测值播种的伪随机数引擎可能会导致漏洞,例如在安全协议中。这是 CERT 安全规则,请参阅 MSC51-CPP. 确保您的随机数生成器已正确播种 和 MSC32-C. 正确播种伪随机数生成器.
示例
void foo() {
std::mt19937 engine1; // Diagnose, always generate the same sequence
std::mt19937 engine2(1); // Diagnose
engine1.seed(); // Diagnose
engine2.seed(1); // Diagnose
std::time_t t;
engine1.seed(std::time(&t)); // Diagnose, system time might be controlled by user
int x = atoi(argv[1]);
std::mt19937 engine3(x); // Will not warn
}
选项¶
- DisallowedSeedTypes¶
一个以逗号分隔的类型名称列表,这些名称是不允许的。默认值为
time_t
、std::time_t
。