【发布时间】:2012-03-06 06:55:44
【问题描述】:
注意事项:
- 我还是个 php 新手
- 如果我不对密码进行哈希处理,此登录表单似乎可以正常工作。
- 我试过 md5、sha256,现在我把它留在了 sha1。这些都不起作用。
- 我首先使用
echo sha1("password");找出密码的哈希值,然后复制该哈希值并使用phpMyAdmin 手动粘贴。我不确定这是否是问题所在。
这里是代码:
<?php
session_start();
require("config.php");
if(isset($_POST['submit'])) {
$username = mysql_real_escape_string($_POST['username']);
$password = sha1(mysql_real_escape_string($_POST['password']));
$loginsql = "SELECT * FROM login WHERE username = '" . $username .
"' AND password = '" . $password . "'";
$loginresult = mysql_query($loginsql);
$loginnumrows = mysql_num_rows($loginresult);
if($loginnumrows == 1) {
$loginrow = mysql_fetch_assoc($loginresult);
session_register("USERNAME");
session_register("USERID");
$_SESSION['USERNAME'] = $loginrow['username'];
$_SESSION['USERID'] = $loginrow['id'];
header("Location: " . $config_basedir . "controlpanel.php");
}
else{
echo "<p>Incorrect Login, please try again!</p>";
}
}
else{
}
?>
我真的不太确定该去哪里。我确信我的代码可以更有效,但正如我在笔记中提到的,当我不散列密码时它确实有效。感谢您的阅读。
【问题讨论】:
-
password如何在您的数据库中设置? -
在数据发送到数据库之前,您不应该使用
mysql_real_escape_string。具体来说,sha1(mysql_real_escape_string($_POST['password']));应该是mysql_real_escape_string(sha1($_POST['password']));。我们也看不到 存储的 密码是如何散列的,所以我们无法真正帮助您。尝试选择记录并var_dump输入您的密码。将此与发布到服务器的值进行比较。这些是您应该学习遵循的基本调试步骤。 -
你试过
$password = sha1($_POST['password']);吗?这里不需要 mysql_real_escape_string。 -
当您首先创建哈希(插入数据库)时,您是否还通过
mysql_real_escape_string运行文本?如果不是,并且您的密码包含特殊字符,它可能会被mysql_real_escape_string破坏。两次都需要以同样的方式进行。 -
比较哈希的方式与最初插入数据库的方式完全相同。
标签: php database hash login passwords