- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我仍在学习“PHP 和 SQL 傻瓜书第 4 版”。我现在遇到的问题是,如果我尝试使用正确的密码登录,我会被告知密码不正确,我通过 PHP Web 文件添加的所有记录都会发生这种情况。我通过 phpmyadmin 添加的记录工作正常(删除加密语句后),并且在提供正确的密码后我可以访问登录页面。我怀疑问题出在加密上,因为 phpmyadmin 中的密码列包含所有内容的相同密文(“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 添加时,用户名/密码登录方法才能正常工作。我想让它在我通过网站注册时起作用,为什么即使我输入了不同的密码,我数据库的密码列中的所有密文都是相同的?
最佳答案
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了解更多信息。
我强烈建议您找到更新的引用文本。您正在使用的版本已经明显过时了。
关于php - 当我包含加密时,SQL 密码字段不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28281114/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!