0

希望这很简单。如果用户能够提供“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)。谢谢!

4

1 回答 1

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' 来确定某人是否正在提交表单或获取表单,这比使用获取 URL 参数更干净(尽管我猜另一个没有问题方法...)

于 2012-04-24T05:06:56.740 回答