我仍在使用“PHP和SQL for Dummies第4版”。我现在遇到的问题是,如果我尝试使用正确的密码登录,我被告知密码不正确,这种情况发生在我通过PHP Web文件添加的所有记录中。我通过phpmyadmin添加的记录工作正常(删除加密语句后),我可以在提供正确的密码后访问登录页面。我怀疑问题将来自加密,因为phpmyadmin中的密码列包含所有内容的SAME密文(“d41d8cd98f00b204e98009”)(除了通过phpmyadmin输入的记录,没有任何加密)。我将包含我的代码中包含加密的部分,也许任何人都可以发现它们中的任何错误。 在检查数据库中的匹配项之前加密输入密码的代码:
if($num > 0) //login name was found
{
$sql = "SELECT loginName FROM Member
WHERE loginName='$_POST[fusername]'
AND password=md5('$_POST[fpassword]')";
$result2 = mysqli_query($cxn,$sql)
or die("Query died: fpassword");
$num2 = mysqli_num_rows($result2);
if($num2 > 0) //password matches
{
$_SESSION['auth']="yes";
$_SESSION['logname'] = $_POST['fusername'];
$sql = "INSERT INTO Login (loginName,loginTime)
VALUES ('$_SESSION[logname]',NOW())";
$result = mysqli_query($cxn,$sql)
or die("Query died: insert");
header("Location: New_memberpage.php");
}
在将新注册用户的密码发送到数据库之前对其进行加密的代码:
else // Add new member to database
{
$sql = "INSERT INTO Member (loginName,createDate,
password,firstName,lastName,street,city,
state,zip,phone,fax,email) VALUES
('$loginName',NOW(),md5('$password'),
'$firstName','$lastName','$street','$city',
'$state','$zip','$phone','$fax','$email')";
mysqli_query($cxn,$sql);
$_SESSION['auth']="yes";
$_SESSION['logname'] = $loginName;
我的挑战摘要是,当我通过phpmyadmin添加时,用户名/密码登录方法才能正常工作。我希望在我通过网站注册时能够正常工作,为什么我的数据库的密码列中的所有密文都是相同的东西,即使我为所有密码输入了不同的密码?
答案 0 :(得分:1)
d41d8cd98f00b204e9800998ecf8427e
是空字符串的MD5哈希值。所以这里似乎有两件事是错的:
密码未正确传递给您的SQL查询。它最终没有任何东西。
您的密码列不足以存储整个哈希值。
更重要的是,您所关注的教程存在一些问题:
它教你使用" mysql"延期。 This extension is deprecated, and will not be available in future versions of PHP." mysqli"和" PDO"扩展是可取的,因为它们将来会继续可用,并且它们支持重要的安全功能,例如准备好的查询和参数占位符。
它似乎没有教你引用传递给MySQL查询的值(或者它期望你依赖magic_quotes
,这更糟糕)。这可能会在您的应用程序中引入严重的安全漏洞。
它指示您使用md5()
作为密码哈希。这不是一种存储密码的安全方法;一种更好的方法是较新的password_hash()
/ password_verify()
函数集。有关详细信息,请参阅PHP's FAQ on password hashing。
我强烈建议您找一个较新的参考文字。你正在使用的那个已经过时了。
答案 1 :(得分:0)
我在程序中发现了错误。我使用相同的变量名称“密码”连接到我的数据库(带空引号)。使用主机,用户名和数据库声明的密码覆盖了我的表中的密码。我将所有连接“密码”更改为“passwrd”,我能够在我的数据库中查看密码。感谢所有回复,至少我现在知道md5对敏感数据不是很安全。必须始终对所有变量名使用不同的标识符!