【问题标题】:PHP password_verify , [duplicate]PHP密码验证,[重复]
【发布时间】:2019-06-26 14:59:04
【问题描述】:

您好, 有一个基本的注册/登录表单,只是使用 password_hash 将哈希存储在数据库中。检查密码登录有问题

尽量不要煮过头 :)

<?php
    session_start();

    require_once 'conn.php';

    if(ISSET($_POST['login'])){
        if($_POST['user_name'] != "" || $_POST['password'] != ""){
            $username = $_POST['user_name'];
            $password = $_POST['password'];
            $sql = "SELECT * FROM `users` WHERE `user_name`=? AND `password`=? ";
            $query = $conn->prepare($sql);
            $query->execute(array($username,$password));
            $row = $query->rowCount();
            $fetch = $query->fetch();
            if($row > 0) {
                $_SESSION['user'] = $fetch['user_id'];
                header("location: home.php");
            } else{
                echo "<script>alert('Detalii Incorecte'); window.location='login.php'</script>";
            }
        }else{
             "<script>alert('Completeaza tot!'); window.location='login.php'</script>";
        }
    }
?>

好的,我在这里错了 当我存储纯文本时,这非常有效...... 当我应用 pasword_hash 时,我很难“重写”我的代码以匹配散列密码列

【问题讨论】:

  • A 500 错误是一种通用错误消息,几乎涵盖了脚本可能出错的每一件事。检查您的服务器错误日志以找出确切的错误消息。
  • 我在这里看到的明显错误是$hashed 在你尝试使用之前没有创建。
  • 另外,$row 是一个数字,在查询中应引用电子邮件。
  • 为什么不绑定邮箱就准备报表?
  • 哇.. tnx 的回复.. 但太多的空白让我无法回答每个人 :D 。无论如何,$hashed 应该在注册文件中,对吧?我有密码。关于 $row,我认为它会检查包含的任何值。欢迎任何解释。我对php.net/manual/en/function.password-verify.php 进行了攻击,但老实说,我不明白......但是。谢谢

标签: php


【解决方案1】:
<?php

session_start();
require 'conn.php';

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

  if($_SERVER["REQUEST_METHOD"] == "POST"){
    $maile = $_POST["maile"];
    $password = $_POST["password"];

  $con = mysqli_connect('localhost','u3970232106_donat','jesu');

    $query = "SELECT * FROM `users` WHERE `maile` = '$maile'";
    $result = mysqli_query($con, $query);
    $hashed = password_hash($password, PASSWORD_DEFAULT);

         if(password_verify($_POST["password"],$hashed)) {
            header("location: home.php");
}else{
echo 'wrong';
}
}
?>

已修复! ! ! 但无论如何,在这里的大多数帖子中,都说“不需要在 LOGIN.PHP 中放置 paword_hash ......一直都是这样......

【讨论】:

  • fo off....这怎么可能...它工作得很好...现在没有了..也没有错误..只是 rdirect 我登录...那里 wtf
  • 你在这段代码中有一个 SQL 注入。变量$maile$password 直接传递给数据库。
  • 感谢警告。项目将保持离线,直到我能正确地完成它。不幸的是,我开始使用旧示例,但在 PDO 或 MYSQLI 之前,我开始弄脏了......最后,希望更好地理解“它是如何工作的”
猜你喜欢
  • 2020-12-26
  • 1970-01-01
  • 2014-12-19
  • 2020-08-16
  • 1970-01-01
  • 2020-07-25
  • 2012-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多