使用BCRYPT错误mysqli


Using BCRYPT wrong with 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');

首先,您在查询中使用了错误的密码变量$PW,而不是您在顶部使用它的预期$StorePassword变量,然后将其传递给哈希函数。

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

    如果仍然不起作用,则该功能可能无法使用,需要使用密码兼容性包

    • (if PHP <5.5) https://github.com/ircmaxell/password_compat/

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

    <?php 
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    // rest of your code
    

    旁注:显示错误应该只在登台时显示,而不应该在生产中显示。

    参考以下链接

    • http://php.net/manual/en/mysqli.error.php
    • http://php.net/manual/en/function.error-reporting.php

    并将其应用到您的代码中。

    你可能在你的查询中有错误,但是你没有检查它们。

    另外,既然您没有发布HTML表单,请确保它使用post方法,并且所有输入都具有正确的名称属性。

    • 仅供讨论;您发布的代码缺少右括号}

    • 也添加exit;后头,应该有更多的代码之后。否则,您的代码可能需要继续执行。

    • 确保你确实成功连接使用相同的MySQL API,因为你正在使用查询,是mysqli_。这对我们来说是未知的。

      • 不同的api如mysql_和PDO不能与mysqli_混合,反之亦然。
    • 确保你没有在标题前使用session_start();在它现在所在的地方输出;它看起来好像在开始PHP标记之前有一个空格,这被认为是输出。错误报告也会告诉你。


    你现在的代码是开放的SQL注入。使用预处理语句,或者使用PDO与预处理语句它们更安全


    脚注:

    确保密码列的长度足以存储散列。为了适应未来,PHP.net建议使用VARCHAR(255)和。对于所有列和正确的长度/类型都是一样的。

    • http://php.net/manual/en/function.password-hash.php

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