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


Any Security holes in this php code?

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

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

入门

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();

更新2.如果您在3次错误尝试后阻止此代码,这将是安全的。

是的,出于安全目的,您不应该使用不安全的随机数生成器。

发件人http://php.net/manual/en/function.rand.php

注意:此函数不会生成加密安全的值,并且不应用于加密目的。如果您需要加密安全值,请考虑使用而是openssl_random_pseudo_bytes()。

这是因为rand会生成可预测的值,攻击者只需要计算出使用的种子即可。

请参阅此处:预测PHP的rand()的输出

在$alphabet变量中使用更多的字符,如@或#和小写字母。