- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了密码哈希问题,当我登录时,我想让用户登录 session ,但当我使用密码验证时不起作用,ECHO 不返回任何内容。我该如何解决这个问题?谢谢这是我的代码:
<?php
session_start();
include_once("../Backend/conexao_db.php");
if((isset($_POST['txt_usuario'])) && (isset($_POST['txt_senha']))) {
$usuario = mysqli_real_escape_string($conn, $_POST['txt_usuario']);
$pass = mysqli_real_escape_string($conn, $_POST['txt_senha']);
$passwordhash = password_hash($pass, PASSWORD_DEFAULT);
$result_usuario = "SELECT * FROM tbl_Usuario WHERE email = '$usuario' && senha = '$pass'";
$resultado_usuario = mysqli_query($conn, $result_usuario);
if ($resultado = mysqli_fetch_assoc($resultado_usuario)) {
if (password_verify($pass, $passwordhash)) {
$_SESSION['usuarioId'] = $resultado['id'];
if ($_SESSION['empresaID'] == "") {
echo $_SESSION['usuarioId'];
} else {
}
}
}
}
当我不使用password_verify时,此代码可以完美运行。
最佳答案
您在那里所做的事情是无用的,因为您正在测试刚刚创建的密码哈希以与其自身匹配。这永远都是事实。
如果不知道您的 session 变量,我会猜测 if ($_SESSION['empresaID'] == "")
会导致您的错误,除非您在其他地方设置它。
但是要改进你的代码:
您应该将哈希存储在数据库中并测试结果与输入的密码是否匹配。此过程的目标是您不必将密码以明文形式存储在数据库中。
此外,请使用准备好的语句来防止 SQL 注入(inject)。在我的示例中,我使用 PDO .
使用准备好的语句,您可以避免 mysqli_real_escape_string
- 如果其中有任何特殊字符,它会更改密码。
if((!empty($_POST['txt_usuario'])) && (!empty($_POST['txt_senha']))) {
$usuario = $_POST['txt_usuario'];
$pass = $_POST['txt_senha'];
// returns a connection to pdo
$conn = Database::connectPDO();
$stmt = $conn->prepare('SELECT * FROM tbl_Usuario WHERE email = :email');
$stmt->bindParam(':email', $usuario);
if($stmt->execute()) {
while($user = $stmt->fetch(PDO::FETCH_ASSOC)) {
if(password_verify($pass, $user['senha'])) {
echo 'success';
}
}
}
}
因此,如果您要添加用户,则应将散列后的密码存储在数据库中,以便此功能发挥作用:
if((!empty($_POST['txt_usuario'])) && (!empty($_POST['txt_senha']))) {
$usuario = $_POST['txt_usuario'];
$pass = $_POST['txt_senha'];
$hashedPassword = password_hash($pass, PASSWORD_DEFAULT);
$conn = Database::connectPDO();
$stmt = $conn->prepare('INSERT INTO tbl_Usuario (email, senha) VALUES (:email, : senha)');
$stmt->bindParam(':email', $usuario);
$stmt->bindParam(':senha', $hashedPassword);
if($stmt->execute()) {
echo 'successfully registered';
}
}
关于php - 使用password_hash错误进行password_verify在登录时将用户存储在 session 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47321932/
我正在使用 PHP 5.5+ password_hash() 函数在将密码存储到数据库之前对其进行哈希处理。到目前为止一切顺利。 我有点不确定的是,是否需要对从表单发送到我的 PHP 脚本的密码进行预
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我一直在阅读有关密码哈希函数的内容,据说:使用盐使黑客的工作更加困难,使用高度成本算法等我找到了这个 password_hash 函数但是......它返回这个(字母是一个例子来解释) AAAACCC
根据(相对)新的 PHP 文档: password_hash函数使用随机盐(我们不应该担心.. O_O),所以如果我理解正确,盐必须存储在某个地方,否则用户在注册到网站后将无法登录(不同的盐=>不同的
这个问题在这里已经有了答案: Using PHP 5.5's password_hash and password_verify function (4 个答案) 关闭 7 年前。 我正在考虑使用
这个问题在这里已经有了答案: password_hash returns different value every time (1 个回答) 关闭 4 年前。 我试图在将密码存储到用户数据库之前对
如果我有两个使用 password_hash 创建的密码哈希功能,我如何判断它们是否来自相同的基本密码?我知道它每次都使用不同的盐。我没有纯文本。 例如: $2y$10$M6CnjqaxuUKNhg8
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 6 年前。 Improve t
我知道 PHP 函数,password_hash 在一个字符串中输出算法、成本、salt 和哈希,因此 password_verify 可以检查密码。 来自 PHP page 的示例输出: $2y$1
我的注册脚本接受用户密码,然后使用 PHP 的 password_hash 函数对密码进行加密,然后将其放入数据库中。当我使用刚创建的用户登录时,出现检查密码是否相同的错误。就我而言,他们不是。我在登
阅读有关新 password_hash 的文档PHP 5.5 的函数,我想知道默认算法是什么: password_hash("rasmuslerdorf", PASSWORD_DEFAULT); 关于
我正在制作一个登录系统,我想对密码进行哈希处理以使其更安全,但每次都会返回不同的哈希值,甚至无法使用 password_verify() 进行验证,这是我的代码: $password = passwo
这个问题在这里已经有了答案: Secure hash and salt for PHP passwords (14 个答案) 关闭 8 年前。 我想知道 password_hash("customp
我现在正在本地主机上运行 php 版本 5.4.16,同时我正在开发我的网站。我想使用 password_hash(),但我一直收到此错误: Fatal error: Call to undefine
PHP password_hash() 函数允许的最大成本是多少? $options = [ 'cost' => 18, ]; $res = password_ha
PHP password_hash() 函数允许的最大成本是多少? $options = [ 'cost' => 18, ]; $res = password_ha
我有 2 个具有不同代码的注册页面,但我希望它们返回相同的密码哈希值!或至少 Password_verify 接受的格式首先是: function _password_hash($password)
这个问题在这里已经有了答案: Implement password recovery best practice (12 个答案) 关闭 7 年前。 我目前正在使用 password_hash,这是
我正在使用 password_hash 函数来保护登录页面上的用户密码。但是,在注册页面上,我要求用户两次提示他的密码,但我无法比较两个哈希值,因为即使密码相同,它们也不同。 我应该将两个密码作为字符
我可以在 PHP 5.5 password_hash() 和 password_verify() 中使用的最大密码长度是多少? 最佳答案 好的,让我们来看看这个。 函数确实有密码长度限制。就像 PHP
我是一名优秀的程序员,十分优秀!