这个PHP代码中的任何安全漏洞?

时间:2013-08-16 05:58:09

标签: php security random one-time-password

我在这个网站上找到了以下代码的结构,我现在正在使用它,所以我只是想知道是否有任何可以从这段代码中利用的安全漏洞,如果它可以改进或者如果有的话,我不应该使用任何弃用的元素。

我将通过短信将以下内容用于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();
?>

初级

3 个答案:

答案 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将生成可预测的值,攻击者只需要弄清楚所使用的种子。

见这里:Predicting the output of PHP's rand()

答案 2 :(得分:0)

在$ alphabet var。

中使用更多字符,如@或#和小写字母