希望这很简单。如果用户能够提供"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)。谢谢!
您绝对应该考虑用盐散列密码。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!";
}
无论如何,您看起来刚刚开始,所以我会非常小心您如何进行实际的密码验证。据我了解,bcrypt2 是你想用的而不是 md5,但我会让你阅读如何在 PHP 中做到这一点;你绝对应该阅读这些东西。
我还会检查您的登录表的结构。您可能希望其中有多个用户,否则为什么不将哈希存储在代码本身而不是数据库中呢?
此外,您可以通过检查 $_SERVER['REQUEST_METHOD'] == 'POST' 来确定某人是否正在提交表单或获取表单,这比使用 get URL 参数更干净(尽管我想另一种方法没有错......