随机码生成器(Php)的安全性如何?我会被“黑客入侵”吗?

时间:2012-04-25 14:00:29

标签: php random code-generation

我设置了一个系统来生成随机代码。它爬上了成千上万的人:

function createRandomPassword() {
    $chars = "abcdefghijklmnopqrstuvwxyz0123456789";

    srand((double)microtime()*1000000);
    $i = 0;
    $pass = '' ;
    while ($i <= 7) {
        $num = rand() % 33;
        $tmp = substr($chars, $num, 1);
        $pass = $pass . $tmp;
        $i++;
    }
    return $pass;
}

基本上这个函数用于循环并给出我想要的结果数。然而,非常重要的是,没有人能够获得一些这些代码并想出一种方法来从给定的公式或其他东西中预测更多这些代码。我目前的系统有可能吗?或者有没有办法让我当前的系统更安全,以防止人们预测更多的代码?

由于

1 个答案:

答案 0 :(得分:0)

我怀疑人们可以很容易地预测产生更多代码的方法,除非他们当然有你的PHP代码。

您可以将有效代码存储在数据库中,并检查输入的代码是否是您生成的代码,方法是检查它是否存在于“valid_codes”表中。

或者....

我可能会尝试在$ pass代码中添加验证字符串,这样您就可以在用户输入密码后检查代码确实是有效代码(由您生成)。

例如,这会在$ pass:

的末尾添加一个6个字符的验证字符串
function createRandomPassword() {
    $chars = "abcdefghijklmnopqrstuvwxyz0123456789";

    srand((double)microtime()*1000000);
    $i = 0;
    $pass = '' ;
    while ($i <= 7) {
        $num = rand() % 33;
        $tmp = substr($chars, $num, 1);
        $pass = $pass . $tmp;
        $i++;
    }

    // NEW STUFF HERE
    $salt = 'my_secret_salt';
    // generate an md5 of $pass + our salt
    $verification_md5 = md5($pass . $salt);
    // $verification_code = the first 6 characters of that md5
    $verification_code = substr($verification_md5, 0, 6);

    $pass = $pass . $verification_code;

    return $pass;
}

然后,当有人输入您的代码时,您可以通过检查他们输入的代码的md5()+ salt的前6个字符来检查这是否是“有效”代码(当然减去最后6个字符)