登录系统中的电子邮件/用户名组合不正确错误

瓦克盖伊

我的网站上有一个登录系统,有人可以在其中创建一个帐户,然后注销然后重新登录。当用户尝试登录一个不存在的帐户时,会显示一条消息。“电子邮件/用户名组合不正确”。我遇到的问题是,即使帐户确实存在,此消息也会显示。

这是 index.php

<!DOCTYPE html>
<?php

session_start();

if(isset($_SESSION['username'])) {

header("Location: home.php");

$_SESSION["success"] = "You are now logged in";

}


?>
<html>

<head>


</head>


<body>

<form action="verify_registration_form.php" method="post">
<br>
<input type="username" id="user_name" name="user_name" placeholder="Username" required>
<br><br><br><br><input type="password" id="user_pass_word" name="user_pass_word" placeholder="Password" required>
<br><br><br><br><input type="email" id="user_email" name="user_email" placeholder="Email" required>
<br><br><br><br><input type="submit" class="submit_registration_form_button" id="submit_registration_form_button" name="submit_registration_form_button" value="Sign Up">

</form>

<form action="verify_login_form.php" method="post">

<input type="username" id="user_email_login" name="user_email_login" placeholder="Email" required>
<input type="password" id="user_pass_word_login" name="user_pass_word_login" placeholder="Password" required>
<input type="submit" class="submit_user_login_form_button" id="submit_user_login_form_button" name="submit_registration_form_button" value="Log In">

</form>


</body>


</html>

这是 home.php

<!DOCTYPE html>
<?php

session_start();

if(!isset($_SESSION['username'])) {


header('Location: index.php');

}



?>
<html>

<head>


</head>


<body>

<?php

echo $_SESSION["success"];


?>

<?php if (isset($_SESSION['username'])) : ?>

<p>Welcome <?php echo $_SESSION['username']; ?>


<br><br>

<form action="logout.php" method="post">
<input type="submit" id="logoutbutton" name="logoutbutton" class="logoutbutton" value="Logout">
</form>

<?php  endif ?>

</body>


</html>

这是verify_login_form.php

<!DOCTYPE html>
<?php

session_start();


if($_SERVER['REQUEST_METHOD'] != 'POST') {

header("Location: index.php");

}else{

$connection = mysqli_connect("localhost", "root", "", "websiteusers");

if(!$connection) {

echo "Could not connect to MYSQL database";

}else{
echo "Sucessfully connected to MYSQL database";
$connection = mysqli_connect("localhost", "root", "", "websiteusers");
$useremail = mysqli_real_escape_string($connection, 
$_POST["user_email_login"]);
$userpassword = mysqli_real_escape_string($connection, 
$_POST["user_pass_word_login"]);
$query = "SELECT * FROM websiteusers WHERE UserEmail='$useremail' AND UserPassWord='$hasheduserpassword'";
$results = mysqli_query($connection, $query);
if(mysqli_num_rows($results) == 1) {

$_SESSION['username'] = $username;
$_SESSION['success'] = "You are now logged in";
header("Location: home.php");
}else{

echo "Email/Username combination is incorrect";

}



}

}




?>
<html>

<head>


</head>

<body>



</body>



</html>
缺口

您不能直接比较散列密码。你需要password_verify改用。改变:

$hasheduserpassword = password_hash($userpassword, PASSWORD_DEFAULT);
$query = "SELECT * FROM websiteusers WHERE UserEmail='$useremail' AND UserPassWord='$hasheduserpassword'";
$results = mysqli_query($connection, $query);
if(mysqli_num_rows($results) == 1) {

类似于:

$query = "SELECT * FROM websiteusers WHERE UserEmail='$useremail'";
$results = mysqli_query($connection, $query);
if(mysqli_num_rows($results) == 1 && $row = mysqli_fetch_assoc($results) && password_verify($userpassword, $row['UserPassWord'])) {

这样做的原因password_hash()是使用随机盐来增强散列安全性,并且生成的散列包含此盐。password_verify()从此散列中提取盐,并使用相同的盐对比较字符串进行散列,结果(如果两个密码相同)在相同的散列中,而password_hash()第二次使用会导致使用不同的随机盐,这不会生成相同的散列,因此比较将失败(感谢@Aurelien 的解释)。

请注意,即使使用mysqli_real_escape_string也不会使您完全不受 SQL 注入的影响,您应该改用准备好的语句。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

设计显示不正确的用户名,电子邮件或密码错误消息

来自分类Dev

如果用户名/电子邮件不正确,如何在客户端挂钩中拒绝提交?

来自分类Dev

带有用户名和电子邮件的 PDO 登录系统

来自分类Dev

使用电子邮件或用户名登录

来自分类Dev

登录以获取用户名而不是电子邮件

来自分类Dev

使用用户名或电子邮件登录

来自分类Dev

登录以获取用户名而不是电子邮件

来自分类Dev

电子邮件作为用户名登录joomla 3.4

来自分类Dev

如何允许用户使用php中的用户名和电子邮件登录?

来自分类Dev

解析Android中的登录用户名和电子邮件

来自分类Dev

如何在Spring security中通过电子邮件而不是用户名登录

来自分类Dev

从Phabricator中的用户名获取电子邮件

来自分类Dev

在激活电子邮件中交流用户名

来自分类Dev

如果密码或用户电子邮件格式不正确,则返回错误消息

来自分类Dev

在Django中使用电子邮件地址或用户名登录用户

来自分类Dev

允许用户使用电子邮件或用户名(AspNet.Identity)登录

来自分类Dev

如何设计支持通过用户名/电子邮件/手机登录的用户表?

来自分类Dev

允许用户使用电子邮件或用户名使用 Passport、LocalStrategy 登录

来自分类Dev

ASP.NET Identity 2电子邮件和用户名的分隔,并使用电子邮件登录

来自分类Dev

在Excel中使用自动登录宏时不正确的用户名或密码

来自分类Dev

登录失败后,为什么Gmail不会显示用户名或密码不正确?

来自分类Dev

程序总是登录,即使用户名不正确

来自分类Dev

登录失败后,为什么Gmail不会显示用户名或密码不正确?

来自分类Dev

Codeigniter登录验证不正确的用户名和密码

来自分类Dev

由于用户名或密码不正确,vsphere无法完成登录

来自分类Dev

Facebook社交登录获取用户名,电子邮件,电话

来自分类Dev

使用电子邮件或用户名登录Node.js Passport策略

来自分类Dev

Laravel使用电子邮件代替用户名登录

来自分类Dev

接受用户名或电子邮件以使用django-allauth登录

Related 相关文章

  1. 1

    设计显示不正确的用户名,电子邮件或密码错误消息

  2. 2

    如果用户名/电子邮件不正确,如何在客户端挂钩中拒绝提交?

  3. 3

    带有用户名和电子邮件的 PDO 登录系统

  4. 4

    使用电子邮件或用户名登录

  5. 5

    登录以获取用户名而不是电子邮件

  6. 6

    使用用户名或电子邮件登录

  7. 7

    登录以获取用户名而不是电子邮件

  8. 8

    电子邮件作为用户名登录joomla 3.4

  9. 9

    如何允许用户使用php中的用户名和电子邮件登录?

  10. 10

    解析Android中的登录用户名和电子邮件

  11. 11

    如何在Spring security中通过电子邮件而不是用户名登录

  12. 12

    从Phabricator中的用户名获取电子邮件

  13. 13

    在激活电子邮件中交流用户名

  14. 14

    如果密码或用户电子邮件格式不正确,则返回错误消息

  15. 15

    在Django中使用电子邮件地址或用户名登录用户

  16. 16

    允许用户使用电子邮件或用户名(AspNet.Identity)登录

  17. 17

    如何设计支持通过用户名/电子邮件/手机登录的用户表?

  18. 18

    允许用户使用电子邮件或用户名使用 Passport、LocalStrategy 登录

  19. 19

    ASP.NET Identity 2电子邮件和用户名的分隔,并使用电子邮件登录

  20. 20

    在Excel中使用自动登录宏时不正确的用户名或密码

  21. 21

    登录失败后,为什么Gmail不会显示用户名或密码不正确?

  22. 22

    程序总是登录,即使用户名不正确

  23. 23

    登录失败后,为什么Gmail不会显示用户名或密码不正确?

  24. 24

    Codeigniter登录验证不正确的用户名和密码

  25. 25

    由于用户名或密码不正确,vsphere无法完成登录

  26. 26

    Facebook社交登录获取用户名,电子邮件,电话

  27. 27

    使用电子邮件或用户名登录Node.js Passport策略

  28. 28

    Laravel使用电子邮件代替用户名登录

  29. 29

    接受用户名或电子邮件以使用django-allauth登录

热门标签

归档