使用BCRYPT错误的mysqli

als*_*n25 -1 php hash mysqli

我正在尝试创建一个注册页面,并且在使用PASSWORD_BCRYPT和mysqli尝试哈希密码时遇到了麻烦.有人可以解释下面我的代码有什么问题吗?

 <?php

if(isset($_POST['Register'])) { // checking that form is submitted

    session_start();  //creating variables for form entries
    $FName = $_POST['First_Name'];
    $LName = $_POST['Last_Name'];
    $Email = $_POST['Email'];
    $PW = $_POST['Password'];


    $StorePassword = password_hash($PW, PASSWORD_BCRYPT, array('cost' => 10));


    $sql = $con->query("INSERT INTO users (Fname, Lname, Email, Password)Values('{$FName}', '{$LName}', '{$Email}', '{$PW}')");

    header('Location: Login.php');
Run Code Online (Sandbox Code Playgroud)

Fun*_*ner 5

首先,您在查询中使用了错误的变量$PW而不是$StorePassword您在顶部使用它的目标变量,然后将其传递给散列函数.

您的密码存储为"rasmuslerdorf"而不是"$ 2y $ 10 $ .vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a"

如果仍然无效,那么您可能无法使用该功能,需要使用密码兼容包

错误报告添加到文件的顶部,这将有助于查找错误.

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code
Run Code Online (Sandbox Code Playgroud)

旁注:显示错误只能在分段中完成,而不能在生产中完成.

请参阅以下链接

并将其应用于您的代码.

您的查询可能有错误,但您没有检查它们.

另外,如果您没有发布HTML表单,请确保它使用的是POST方法,并且所有输入都带有正确的名称属性.

  • 只是出于争论的缘故; 您发布的代码缺少右括号}

  • 还要exit;在标题后添加,之后应该有更多的代码.否则,您的代码可能希望继续执行.

  • 确保使用与查询时相同的MySQL API确实成功连接mysqli_.这对我们来说是未知的.

    • 不同的API(如mysql_PDO和PDO)不会混用,mysqli_反之亦然.
  • 确保你没有在标题使用之前输出session_start();它现在所在的位置; 它看起来好像在打开PHP标记之前有一个空格,它被视为输出.错误报告也会告诉您.


您现在的代码对SQL注入是开放的.使用准备好的语句,或PDO与准备好的语句,它们更安全.


脚注:

确保密码列足够长以存储哈希值.PHP.net建议使用VARCHAR(255)和以适应未来.所有列和正确的长度/类型都是一样的.

"请注意,此常量随着时间的推移而变化,因为新的和更强的算法被添加到PHP中.因此,使用此标识符的结果长度可能会随着时间的推移而变化.因此,建议将结果存储在数据库列可以扩展超过60个字符(255个字符将是一个不错的选择)."