Php - 将密码与root密码进行比较

时间:2012-04-24 04:35:03

标签: php mysql passwords comparison

希望这很简单。如果用户能够提供“root”密码,我会尝试向用户授予管理权限。有没有办法将这个新输入的密码与root密码进行比较?这是我的代码到目前为止的样子:

<form action='index.php?login=yes' method=POST>
Password: <input type=password name='pwd'><br />
<input type=submit value='Login' />
</form> 

<?php

    $pass=$_POST['pwd'];
    $login=$_GET['Login'];

    if($login=='yes') {

        $con=mysql_connect('localhost','root','');
        mysql_select_db('Login');

        $get=mysql_query("SELECT count(id) FROM Login WHERE pwd = '$pass'");
        $result=mysql_result($get, 0);

        mysql_close($con);

        if($result!=1)
            echo"Login Failure!";
        else {
            echo"Login Success";
        };  
    };
?>
</p>

请保持温和,因为PHP与我以前有很多不同(我更喜欢java)。 谢谢!

1 个答案:

答案 0 :(得分:2)

你一定要考虑用盐来哈希密码。 md5()算法并不是真正推荐用于安全环境,但至少可以使工作更加困难。

在数据库中保存密码时,您应该执行类似

的操作
  

$ salt ='dhg1d9h12h1029he01h2e1'; //在这里随便抽一些东西   $ hashedpassword = md5($ salt.md5($ password,true)); //或者你喜欢的任何其他组合

然后,您可以将$ hashedpassword保存到数据库中,如下所示:

mysql_query(sprintf("UPDATE Login SET pwd = '%s' WHERE username = '%s'",  
    mysql_real_escape_string($hashedpassword),  
    mysql_real_escape_string($username)
));

然后,当您想检查密码是否匹配时,执行与上述完全相同的步骤来计算$ hashedpassword值,但传入其测试密码,然后将其与数据库中的内容进行比较,例如:

$result = mysql_query(sprintf("SELECT (pwd = '%s') AS authenticated FROM Login WHERE username = '%s'",
    mysql_real_escape_string($hashedpassword),
    mysql_real_escape_string($username)
));
$row = mysql_fetch_assoc($result);
if ($row['authenticated']) {
    echo "Success!";
}

Aaaanyway,你看起来刚刚开始,所以我会非常小心你如何使用实际的密码验证。根据我的理解,bcrypt2是您想要使用的而不是md5,但我将让您阅读如何在PHP中执行此操作;你一定要仔细阅读这些内容。

我还会检查登录表的结构。您可能需要多个用户,否则为什么不将哈希存储在代码本身而不是数据库中呢?

此外,您可以通过检查$ _SERVER ['REQUEST_METHOD'] =='POST'来确定是否有人提交表单或获取表单,这比使用get URL参数更清晰(虽然我猜没有错用另一种方法......)