我在这个网站上找到了以下代码的结构,我现在正在使用它,所以我只是想知道是否有任何可以从这段代码中利用的安全漏洞,如果它可以改进或者如果有的话,我不应该使用任何弃用的元素。
我将通过短信将以下内容用于OTP代码。
<?php
function randomCode(){
$alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$Code = array();
$alphaLength = strlen($alphabet) - 1;
for ($i = 0; $i < 6; $i++){
$n = rand(0, $alphaLength);
$Code[] = $alphabet[$n];
}
return implode($Code);// turn array into string
}
echo randomCode();
?>
初级
答案 0 :(得分:1)
<强> UPD。强> 我重写了一下代码:
function randomCode(){
$alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$Code = "";
$alphaLength = strlen($alphabet) - 1;
for ($i = 0; $i < 6; $i++){
$Code .= $alphabet[rand(0, $alphaLength)];
}
return $Code;
}
echo randomCode();
<强> UPD2。强> 如果您在3次错误尝试后阻止此代码,这将是安全的。
答案 1 :(得分:1)
是的,出于安全考虑,不应使用不安全的随机数生成器。
来自http://php.net/manual/en/function.rand.php
注意此功能不会生成加密安全 值,不应用于加密目的。如果你需要 加密安全值,请考虑使用 openssl_random_pseudo_bytes()代替。
这是因为rand
将生成可预测的值,攻击者只需要弄清楚所使用的种子。
答案 2 :(得分:0)
在$ alphabet var。
中使用更多字符,如@或#和小写字母