【发布时间】:2018-08-31 16:10:30
【问题描述】:
我有这个 html 表单:
<form action="seite2.php" method="post">
Benutzername:<br />
<input type="Text" name="username"><br /><br />
Passwort:<br />
<input type="Password" name="passwort" />
<input type="Submit" value="Absenden" />
</form>
在 seite2.php 上我先得到了这段代码,用来检查哈希值:
$username = $_POST["username"];
$passwort = $_POST["passwort"];
$pass = sha1($passwort);
echo $pass;
然后,我想检查用户名&&密码是否正确并比较哈希值。假设用户名是:mue。密码是:pass。我得到了这个哈希:da39a3ee5e6b4b0d3255bfef95601890afd80709。
if($username == "mue" AND $pass=="da39a3ee5e6b4b0d3255bfef95601890afd80709")
{
echo '<p>';
echo "Herzlich Willkommen";
echo '</p>';
}
else
{
echo '<p>';
echo "Login failed";
echo '</p>';
但在我的浏览器中,我得到以下响应: da39a3ee5e6b4b0d3255bfef95601890afd80709 登录失败。
无论我使用哪个用户或密码,从浏览器返回的哈希值总是相同的。
【问题讨论】:
-
这是一个空字符串的哈希。
var_dump($passwort);显示什么? -
var_dump($_POST)呢? -
null,不知道为什么
-
var_dump($_POST) 显示空数组
-
请不要自己滚动密码散列。 PHP 提供
password_hash()和password_verify()请使用它们。这里有一些good ideas about passwords如果你使用的是5.5之前的PHP版本there is a compatibility pack available here