希望这很简单。如果用户能够提供“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)。 谢谢!
答案 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参数更清晰(虽然我猜没有错用另一种方法......)