Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 验证和创建哈希密码错误,我可以使用哈希密码创建帐户,但是,我无法验证它?_Php - Fatal编程技术网

Php 验证和创建哈希密码错误,我可以使用哈希密码创建帐户,但是,我无法验证它?

Php 验证和创建哈希密码错误,我可以使用哈希密码创建帐户,但是,我无法验证它?,php,Php,您无法验证哈希密码,因为您选择的用户密码为空: <?php require "Common.php"; $player_username = $_POST ["usernamePost"]; $player_password = $_POST ["passwordPost"]; $hashed_password = password_hash($player_password, PASSWORD_DEFAULT); $conn = new mysqli ($server_host, $s

您无法验证哈希密码,因为您选择的用户密码为空:

<?php
require "Common.php";
$player_username = $_POST ["usernamePost"];
$player_password = $_POST ["passwordPost"];
$hashed_password = password_hash($player_password, PASSWORD_DEFAULT);

$conn = new mysqli ($server_host, $server_username, $server_password, $server_dbName);
    $queryCode = "SELECT * FROM users WHERE Username = '$player_username'";
    $query = mysqli_query ($conn, $queryCode);
    if (mysqli_num_rows($query) > 0) {
        echo "Username already exists.";
    } else {
        $sql = "INSERT INTO users (Username, Password)
        VALUES ('".$player_username."','".$hashed_password."')";
        $result = mysqli_query ($conn,$sql);
        echo "User created.";
    }
?>
从查询中删除密码测试:

$result = mysqli_query ($conn, "SELECT * FROM users WHERE Username ='$player_username' and Password = ''");
请记住,有两种方法可用于编写和执行准备好的语句。使用你最熟悉的方法

password_hash()可以生成一些非常长的文本(当前默认值为60个字符),因此现在将字段变大将允许所需的长度。其次,PHP团队正在向该方法添加更多的算法,这意味着散列可以而且将会增长。我们也不想限制用户使用他们选择的密码或密码短语的能力。最好给变化留点余地

例如,将数据库中的密码字段设置为大

require "Common.php";
$player_username = $_POST ["usernamePost"];
$player_password = $_POST ["passwordPost"];

$conn = new mysqli($server_host, $server_username, $server_password, $server_dbName);

/* check connection */
if (mysqli_connect_errno()) {
    echo "Connect failed: ", mysqli_connect_error());
    exit();
}

 $stmt = $conn->prepare("SELECT * FROM users WHERE Username =?"); // prepare with a placeholder for the variable
 $stmt->bind_param('s', $player_username); // bind the variable
 $stmt->execute(); // execute the query
 $row = $stmt->fetch_assoc(); // get the associative array
 if (password_verify($player_password, $row['hashed_password'])) {
     echo "Signing in...<br>";
     echo "ID:".$row ['ID'] . "|Username:".$row ['Username'] . "|Score:".$row ['Score'] . "|Status:".$row ['Status'];
 } else {
    echo "Incorrect username or password.";
}

无法验证哈希密码,因为您选择的用户密码为空:

<?php
require "Common.php";
$player_username = $_POST ["usernamePost"];
$player_password = $_POST ["passwordPost"];
$hashed_password = password_hash($player_password, PASSWORD_DEFAULT);

$conn = new mysqli ($server_host, $server_username, $server_password, $server_dbName);
    $queryCode = "SELECT * FROM users WHERE Username = '$player_username'";
    $query = mysqli_query ($conn, $queryCode);
    if (mysqli_num_rows($query) > 0) {
        echo "Username already exists.";
    } else {
        $sql = "INSERT INTO users (Username, Password)
        VALUES ('".$player_username."','".$hashed_password."')";
        $result = mysqli_query ($conn,$sql);
        echo "User created.";
    }
?>
从查询中删除密码测试:

$result = mysqli_query ($conn, "SELECT * FROM users WHERE Username ='$player_username' and Password = ''");
请记住,有两种方法可用于编写和执行准备好的语句。使用你最熟悉的方法

password_hash()可以生成一些非常长的文本(当前默认值为60个字符),因此现在将字段变大将允许所需的长度。其次,PHP团队正在向该方法添加更多的算法,这意味着散列可以而且将会增长。我们也不想限制用户使用他们选择的密码或密码短语的能力。最好给变化留点余地

例如,将数据库中的密码字段设置为大

require "Common.php";
$player_username = $_POST ["usernamePost"];
$player_password = $_POST ["passwordPost"];

$conn = new mysqli($server_host, $server_username, $server_password, $server_dbName);

/* check connection */
if (mysqli_connect_errno()) {
    echo "Connect failed: ", mysqli_connect_error());
    exit();
}

 $stmt = $conn->prepare("SELECT * FROM users WHERE Username =?"); // prepare with a placeholder for the variable
 $stmt->bind_param('s', $player_username); // bind the variable
 $stmt->execute(); // execute the query
 $row = $stmt->fetch_assoc(); // get the associative array
 if (password_verify($player_password, $row['hashed_password'])) {
     echo "Signing in...<br>";
     echo "ID:".$row ['ID'] . "|Username:".$row ['Username'] . "|Score:".$row ['Score'] . "|Status:".$row ['Status'];
 } else {
    echo "Incorrect username or password.";
}


确保数据库中的字段宽度至少为60个字符。您应该真正使用
VARCHAR(255)
来说明将来哈希中的更改。从SELECT查询
和密码=''中删除此项)
此外,您还存在一些令人讨厌的SQL注入漏洞。请参阅:表示了解的语句。即使是这样也不安全!如果答案解决了你的问题,考虑接受答案。下面是如何返回此处并对勾号/复选标记执行相同操作,直到其变为绿色。这将通知社区,找到了解决方案。否则,其他人可能会认为问题仍然悬而未决,并可能希望发布(更多)答案。您将获得积分,并鼓励其他人帮助您。欢迎来到Stack!确保数据库中的字段宽度至少为60个字符。您应该真正使用
VARCHAR(255)
来说明将来哈希中的更改。从SELECT查询
和密码=''中删除此项)
此外,您还存在一些令人讨厌的SQL注入漏洞。请参阅:表示了解的语句。即使是这样也不安全!如果答案解决了你的问题,考虑接受答案。下面是如何返回此处并对勾号/复选标记执行相同操作,直到其变为绿色。这将通知社区,找到了解决方案。否则,其他人可能会认为问题仍然悬而未决,并可能希望发布(更多)答案。您将获得积分,并鼓励其他人帮助您。欢迎来到Stack!谢谢你的帮助!你太棒了!我将密码长度更改为255个字符,因为看起来我可能需要为此脚本添加更多安全性。您对我如何为该脚本或注册脚本添加更多安全性有何建议?我应该使用什么算法?再次感谢您的帮助!:)单击链接了解如何为所有查询创建准备好的语句。这是你能做的最大的一件事来帮助你的脚本安全。谢谢!我只是看了一下你提供给我的维基百科链接。我不太明白准备好的报表将如何以及在哪里录入。他们会替换上面login.php脚本中的结果变量吗?谢谢:)维基百科的链接很好,但为了更具体地了解@OmarDajani,我在答案中添加了一个准备好的语句示例。谢谢你的帮助!你太棒了!我将密码长度更改为255个字符,因为看起来我可能需要为此脚本添加更多安全性。您对我如何为该脚本或注册脚本添加更多安全性有何建议?我应该使用什么算法?再次感谢您的帮助!:)单击链接了解如何为所有查询创建准备好的语句。这是你能做的最大的一件事来帮助你的脚本安全。谢谢!我只是看了一下你提供给我的维基百科链接。我不太明白准备好的报表将如何以及在哪里录入。他们会替换上面login.php脚本中的结果变量吗?谢谢:)维基百科链接很好,但为了更具体地了解@OmarDajani,我在答案中添加了一个准备好的语句示例。