我正在尝试登录系统,我遇到了一个我似乎无法解决的问题。以下是我的所有代码。
如果您在第43行下输入 echo" $ password&#34 ;; ,请参阅我设置的密码。 em> $ password = md5(md5(" j3d4k",$ password)); 。然后在浏览器上它给你那个代码,所以我把那些代码放在我的数据库的密码中,就像我看过的教程所说的那样。现在它允许我以任何密码登录我的用户。所以我决定将密码设置为密码1一分钟,看看我是否可以使用该密码登录,如果我输入了错误的密码,它就不会让我。仍然失败了。它现在不允许我输入任何密码,说明它们都不正确。
<?php
error_reporting (E_ALL ^ E_NOTICE);
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Login</title>
<style>
</style>
</head>
<body>
<?php
$form = "<form action='./login.php' method='post'>
<table>
<tr>
<td>Username:</td><td><input type='text' name='user' placeholder='Username' /></td>
</tr>
<tr>
<td>Password:</td><td><input type='password' name='password' placeholder='Password' /></td>
</tr>
<tr>
<td></td>
<td><input type='submit' name='loginbtn' value='Login' /></td>
</tr>
</table>
</form>";
if ($_POST['loginbtn']){
$user = $_POST['user'];
$password = $_POST['password'];
if ($user){
if ($password){
require("connect.php");
$password = md5(md5("j3d4k",$password));
// make sure login info correct
$query = mysqli_query($con, "SELECT * FROM users WHERE username='$user'");
$numrows = mysqli_num_rows($query);
if ($numrows == 1){
$row = mysqli_fetch_assoc($query);
$dbid = $row['id'];
$dbuser = $row['username'];
$dbpass = $row['password'];
$dbactive = $row['active'];
if ($password == $dbpass){
if ($dbactive == 1){
// set session info
$_SESSION['userid'] = $dbid;
$_SESSION['username'] = $dbuser;
echo "You have been logged in as <b>$dbuser</b>. <a href='./member.php'>Click here</a> to go to the member page";
}
else
echo "You must activate your account to login. $form";
}
else
echo "You did not enter the correct password. $form";
}
else
echo "The username you entered was not found. $form";
mysqli_close($con);
}
else
echo "You must enter your password. $form";
}
else
echo "You must enter your username. $form";
}
else
echo $form;
?>
</body>
</html>
<?php
$con = mysqli_connect("localhost", "Joshua", "Danielle104");
mysqli_select_db($con, "user");
?>
答案 0 :(得分:1)
您问题中的所有内容实际上都与预期的完全一样(您不应该在第二个方案中使用密码password1
进行连接,因为您在数据库中的条目&#34;密码1&#34;没有&#39; t匹配表单中输入的密码的哈希。
唯一可疑的是,当您将数据库中的password
设置为您打印的哈希时,您可以使用任何密码登录。这显然不是预期的行为。
我的猜测是你实际上在$password
中定义了一个名为connect.php
的全局变量,可能带有你的数据库密码。这样,通过行43
,$password
的值将始终相同,无论您在表单中输入什么密码,因此哈希也将是相同的。要进行确认,请在$password
之后立即打印require('connect.php')
的值,并查看是否是您在表单中输入的密码。
答案 1 :(得分:-1)
尝试使用hash()功能。
例如,在数据库密码列中设置哈希值(&#34; sha256&#34;,&#34; j3d4k&#34;)。结果将是&#34; 0dd15cf0c18375808efdbb7f7180526a6355fe02db72365d1ea0c70165e868d0&#34;。
然后,当您检查时,在用户输入上使用相同的哈希值,然后与存储的密码进行比较。
$password = hash("sha256", $_POST['password']);
更新: 顺便说一下 - 你的代码很容易受到SQL注入攻击。 从不直接在查询中使用用户输入。