为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
猛跑小猪 2022-07-16 11:07:45
我按照本教程为我的网站创建了一个登录系统,到目前为止它运行良好。我完全按照步骤操作,创建了所有需要的文件等。用户以自己的身份登录时,可以毫无问题地更改密码。但是,我现在创建了一个受保护的目录,它允许其他用户重置其他用户的密码(以防他们忘记了密码)。这段代码如下:(我已经包含了该页面的所有代码,除了我的一些样式元素(例如,位于此代码其余部分上方的菜单栏)。虽然我知道这可能不是最好的方法,但我想确保我是为您提供尽可能多的信息。)<?php// Initialize the sessionsession_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.PHPAllows 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 reusablefunction 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 themif ($error != '')表单正确显示,并通过用户的 ID 和用户名提取。我设置的密码哈希与我在网站的更改密码功能中看到的一样(使用默认值)。当我尝试重置另一个用户的密码时,我可以在 phpmyadmin 中看到哈希已更改,因此这意味着更改已正确完成。但是,这就是问题所在,当该用户尝试使用新密码再次登录时,他们被告知密码不正确。我已经并排查看了代码,但我必须承认,作为 PHP 的新手,我对教程中的大部分代码的作用知之甚少,这就是我尝试创建此函数的原因我自己是一个简化版本来执行这个功能。
查看完整描述

1 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

您在此处保存密码为

$hashed = password_hash('$password', PASSWORD_DEFAULT);

您不需要在 $password 周围加上单引号。此外,您确定在登录页面中,在验证凭据时,使用了类似的逻辑吗?可能像

$user['password'] == password_hash($_POST['password'],PASSWORD_DEFAULT)

其中 $user 是从数据库中检索的。


查看完整回答
反对 回复 2022-07-16
  • 1 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信