-1

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

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

初学者

4

3 回答 3

1

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

来自http://php.net/manual/en/function.rand.php

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

这是因为rand会生成可预测的值,攻击者只需要弄清楚使用的种子。

见这里:预测 PHP 的 rand() 的输出

于 2013-08-19T08:50:44.380 回答
1

更新。 我稍微重写了代码:

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 次错误尝试后阻止此代码,这将是安全的。

于 2013-08-16T06:03:08.003 回答
0

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

于 2013-08-16T06:04:42.440 回答