【问题标题】:hello world! implement password_verify你好世界!实施密码验证
【发布时间】:2018-06-30 09:20:39
【问题描述】:

我进入 php 并制作登录脚本一切正常,但是 我在signup.php中对Bcrypt中的密码进行了哈希处理,所以我输入密码时遇到问题使其匹配所以我研究了VERIFY_PASSWORD但是我如何在我自己的脚本上实现它? 澄清如果我只是从表中复制哈希作为密码它可以工作,但我希望它正常工作输入_POST密码, ani 输入是受欢迎的

登录.php

<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);
require 'database.php';

$username = $_POST["username"];
$password = $_POST["password"];

$sql = "SELECT * FROM table2 WHERE username = '".$username."' AND password = '$password'";
$result = $conn->query($sql);
$result->execute();
$count = $result->fetchcolumn();
var_dump($result);///if($result === FALSE) { 
if($count == 1 ){
    echo"login";
    header("location:login4.php");
} else { var_dump($count);
    echo"logout";
}  // die(mysql_error()); // TODO: better error handling
///}

///while($row = mysql_fetch_array($result))
///{
   /// echo $row['username'];
///}
///if(!$row = mysqli_fetch_assoc($result)) {
/// echo "dd";


//else {
//  echo "logged in";



?>

<html>



<form action="login3.php" method="post">

<input type="text" name="username">
<input type="password" name="password">
<button type="submit" name="submit">login</button>

</html>

【问题讨论】:

标签: php passwords


【解决方案1】:

首先,您只需要使用“WHERE 用户名=”。执行请求时无需检查密码。

其次,您必须验证密码。

最后,你也应该使用prepared statements,这样更安全。

因此,您的代码应如下所示(提供的代码可能无法按原样使用,但您可以对其进行调整以获得您想要的结果并阅读文档以了解准备好的语句以及 password_verify 的工作原理):

$sql = "SELECT * FROM table2 WHERE username = :username";
$request = $conn->prepare($sql);
$request->execute([":username" => $_POST["username"]]);  
$user = $request->fetchAll()[0];

if(password_verify($_POST["password"], $user->password)){
    //user is logged in
}else{
    //password is wrong
}

【讨论】:

  • 我在一个新脚本上尝试了你的版本,但它返回了致命错误:在 "" 中调用布尔值上的成员函数 fetch() 所以我一无所知似乎没有任何工作。
猜你喜欢
  • 2021-11-19
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
相关资源
最近更新 更多