使用默认密码哈希更新 SQL 密码可防止登录

我按照本教程为我的网站创建了一个登录系统,到目前为止它运行良好。我完全按照步骤操作,创建了所有需要的文件等。用户以自己的身份登录时,可以毫无问题地更改密码。


但是,我现在创建了一个受保护的目录,它允许其他用户重置其他用户的密码(以防他们忘记了密码)。这段代码如下:


(我已经包含了该页面的所有代码,除了我的一些样式元素(例如,位于此代码其余部分上方的菜单栏)。虽然我知道这可能不是最好的方法,但我想确保我是为您提供尽可能多的信息。)


<?php

// Initialize the session

session_start();

 

// Check if user is logged in. If N, return to /login/

if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){

    header("location: /login/");

    exit;

} ?>




<!DOCTYPE html>

<html>

<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>DAT Room Bookings</title>

<meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Scales to mobile -->

<link rel="stylesheet" type="text/css" href="style.css"> <!-- System style -->

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> <!-- Icons -->

<link href="https://fonts.googleapis.com/css?family=Lato&display=swap" rel="stylesheet"> <!-- System font -->

<link rel="stylesheet" href="scripts/lightbox2-2.11.1/src/css/lightbox.css" />

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <!-- Drop Down Images -->

<script src="scripts/lightbox2-2.11.1/src/js/lightbox.js"></script> <!-- Lightbox Images -->

</head>

<?php


/*


EDIT.PHP


Allows user to edit specific entry in database


*/


// creates the edit record form


// since this form is used multiple times in this file, I have made it a function that is easily reusable


function renderForm($id, $username, $password, $error)


{


?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">


<html>


<head>


<title>Edit Record</title>


</head>


<body>


<?php


// if there are any errors, display them


if ($error != '')


表单正确显示,并通过用户的 ID 和用户名提取。我设置的密码哈希与我在网站的更改密码功能中看到的一样(使用默认值)。当我尝试重置另一个用户的密码时,我可以在 phpmyadmin 中看到哈希已更改,因此这意味着更改已正确完成。


但是,这就是问题所在,当该用户尝试使用新密码再次登录时,他们被告知密码不正确。我已经并排查看了代码,但我必须承认,作为 PHP 的新手,我对教程中的大部分代码的作用知之甚少,这就是我尝试创建此函数的原因我自己是一个简化版本来执行这个功能。



猛跑小猪
浏览 131回答 1
1回答

慕少森

您在此处保存密码为$hashed&nbsp;=&nbsp;password_hash('$password',&nbsp;PASSWORD_DEFAULT);您不需要在 $password 周围加上单引号。此外,您确定在登录页面中,在验证凭据时,使用了类似的逻辑吗?可能像$user['password']&nbsp;==&nbsp;password_hash($_POST['password'],PASSWORD_DEFAULT)其中 $user 是从数据库中检索的。
打开App,查看更多内容
随时随地看视频慕课网APP