【问题标题】:How do you update a hashed password with php and pdo如何使用 php 和 pdo 更新散列密码
【发布时间】:2019-05-08 12:47:26
【问题描述】:

上个月我为一个学校项目创建了一个论坛,但我希望用户可以更改自己的密码。如何使用 PHP 和 PDO 更新密码。

我认为你可以使用:

$password = $_POST['password'];
$confirm_password = $_POST['confirm_password']; 

if($password == $confirm_password){
    $stmt = $conn->prepare("UPDATE password SET password = 
    'password_hash($password)' WHERE id=$id");
} else {
     .....
}

但这不是我想要的......

我有一个表格,但我无法显示,因为出了点问题。 希望大家能帮帮我。

【问题讨论】:

  • $stmt = $conn->prepare("UPDATE password SET password '".password_hash($password)."'' WHERE id=$id");你有语法错误
  • 在您发布的代码中,您似乎只是在准备一份声明。你真的把它也保存到数据库了吗?

标签: php database pdo twitter-bootstrap-3 developer-tools


【解决方案1】:

您在此处使用的称为cargo cult prepared statement,它无法为您提供免受 SQL 注入的保护。正确的代码是

$stmt = $conn->prepare("UPDATE password SET password = ? WHERE id=?");
$stmt->execute([password_hash($password), $id])

【讨论】:

    【解决方案2】:

    当然,你所做的只是将新密码哈希后写入数据库

    $password = $_POST['password'];
    $confirm_password = $_POST['confirm_password']; 
    
    if($password == $confirm_password){
    
        $stmt = $conn->prepare("UPDATE password SET password = :pwd WHERE id=:id");
        $stmt->execute([':pwd' => password_hash($password), ':id'=> $id]);
    } else {
         .....
    }
    

    您的脚本对SQL Injection Attack 开放 甚至if you are escaping inputs, its not safe!MYSQLI_PDO API 中使用prepared parameterized statements

    【讨论】:

      【解决方案3】:

      我找到了解决方案,我错过了密码哈希中的 PASSWORD_DEFAULT。 如果我做错了什么留下反应,我会很感激。

      if(isset($_POST['update_password'])){
      $id = $_SESSION['user_id'];  
      $password = $_POST['password'];
      $confirm_password = $_POST['confirm_password']; 
      
      if(strlen($password) >= 8){
          if($password == $confirm_password){
      
              $new_password = password_hash($password, PASSWORD_DEFAULT);
      
              $stmt = $conn->prepare("UPDATE forum_inhoud SET password = :new_password 
              WHERE id=:id");
              $stmt->execute([
                  ':new_password' => $new_password,
                  ':id' => $id
              ]);
      
              $_SESSION['success'] = 'Wachtwoord is bijgewerkt!';
              header('Location: ../../profile.php');
              exit(0);
          }
      } else {
          $_SESSION['failed'] = 'Er is iets misgegaan!';
          header('Location: ../../profile.php');
          exit(0);
      }   
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-20
        • 2016-01-13
        • 2019-02-15
        • 2018-07-29
        • 1970-01-01
        • 2015-05-24
        • 2015-06-28
        • 2022-01-09
        相关资源
        最近更新 更多