【问题标题】:Better way to change Hash(Encrypt Password) using Email Address使用电子邮件地址更改哈希(加密密码)的更好方法
【发布时间】:2015-09-30 08:03:39
【问题描述】:

我在更改登录密码时遇到问题。我使用哈希和盐作为我的密码。我无法在 phpmyadmin 上更改它,因为它是哈希类型的字符。这是我的

create_acc.php

<?php
include_once('config.php');
$email = $_POST['e-mail'];
$pass = $_POST['pass'];

$hash = hash('sha256',$pass);

function createSalt(){
    $text = md5(uniqid(rand(), true));
    return substr($text,0,3);
}
$salt = createSalt();
$pass = hash('sha256',$salt.$hash);
$email = $mysqli->real_escape_string($email); //$mysqli is located at my config.php

$query = $mysqli->query("INSERT INTO `login`(`email`,`pass`,`salt`) VALUES('$email','$pass','$salt')");

$mysqli->close();

header('location: login.html');
?>

关于如何创建更改密码或忘记密码的任何想法,就像现在在现代登录系统中一样。每当您忘记密码或想更改密码时,服务器会在您的电子邮件中发送一个有关更改加密密码的链接?

【问题讨论】:

  • 停止使用自制散列,开始使用PHP内置的password_hash()/password_verify()
  • 停止将用户输入直接注入 SQL 语句,并开始使用准备好的语句/绑定变量

标签: php mysql hash salt


【解决方案1】:

不,使用 phpmyadmin 你可以做一些简单的加密,比如 md5 和 sha1。但是你可以用一种棘手的方式做到这一点。从任何在线服务或通过 php 加密您的密码,然后将您的加密密码放在您的 phpmyadmin 中。就是这样:)

【讨论】:

  • 先生,我的意思是我需要忘记密码或更改密码,就像现在的现代登录页面一样。每当用户想更改密码或忘记密码时,服务器都会在用户电子邮件中发送一个链接。
  • 来自 phpmyadmin?您正在谈论发送电子邮件链接以恢复密码,这有点令人困惑。但是您想从 phpmyadmin 更改密码!
【解决方案2】:

您可以使用相同的逻辑来实际重置密码/分配新密码。您可以用最简单的方法创建一个密码重置表单和一些 URL(端点),这些 URL(端点)将接受(POST)请求,其中包含电子邮件或用户名作为输入/数据。一旦你得到它,你通常会向用户的电子邮件发送一封电子邮件,其中包含允许用户重置密码的 URL。这部分应该创建一个唯一的令牌,并且应该存储在您选择的数据库中。发送给用户的电子邮件通常包含作为 URL 一部分的令牌,并且理想情况下应在用户访问后立即删除令牌,但您删除/保留令牌的里程和选择可能因应用程序和用户而异。一旦用户访问发送用于密码重置的 URL,您就可以查找令牌,如果令牌存在,则查找要重置密码的用户,然后只允许用户输入密码(并确认密码)。一旦用户点击提交,您只需通过创建新用户时使用的相同密码哈希函数传递新密码。

哦,您的代码可以做得更好。看起来它来自几年前。它可以更安全,写得更好。我建议检查 php 手册以了解密码哈希和准备好的语句。

【讨论】:

  • 啊啊啊。顺便说一句,先生,如何为 post 方法上连接的 url 创建令牌内容? :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-06
相关资源
最近更新 更多