簡體   English   中英

此PHP代碼有什么問題,如何驗證輸入的密碼?

[英]Whats wrong with this PHP code, how to validate the entered password?

require_once "require.php";

$con = new mysqli($hn,$un,$pas,$db);

if ($con->connect_error) 
{
     die("Unbale to connect to the Server");
}

if (isset($_POST["login"])) 
{
    $uname  = $_POST["uname"];
    $lpass  = $_POST["lpass"];
    $query  = "SELECT PASSWORD FROM users WHERE username='$uname'";
    $result = $con->query($query);
    $dpass  = $result->fetch_assoc()['password'];

    if ($dpass==$lpass) 
    {
        echo "Passwords Match";
    }
}

我正在嘗試匹配用戶輸入的密碼和數據庫中輸入的密碼,我不知道我使用的方式是否是獲取密碼的正確方式,我們將不勝感激。

require_once "require.php";

$con = new mysqli($hn,$un,$pas,$db);

if ($con->connect_error) 
{
     die("Unbale to connect to the Server");
}

if (isset($_POST["login"])) 
{
    $uname  = $_POST["uname"];
    $lpass  = $_POST["lpass"];
    $query  = "SELECT PASSWORD FROM users WHERE username='$uname'";
    $result = $con->query($query);
    $dpass  = $result->fetch_assoc()['password'];

    $newhash = password_hash($dpass, PASSWORD_DEFAULT);

    if (password_verify($lpass, $newhash)) {
    echo 'Password is valid!';
    } else {
        echo 'Invalid password.';
    }
}

嘗試這樣...密碼驗證是一種更好的做法

請閱讀評論。 純文本密碼確實不是一個好主意)。 我只是出於學習目的回答您。 不要在實際的現場制作中這樣做!

但是繼續執行您的代碼。 $result->fetch_assoc()返回一個數組。 因此,您必須遍歷它或正確解決它。 本示例期望查詢結果。 因此,您必須檢查是否有結果,否則會出現錯誤。

看一下查詢LIMIT 1$result->fetch_assoc() ,然后看$dpass[0]['password']

 <?php

require_once "require.php";

$con = new mysqli($hn, $un, $pas, $db);

if ($con->connect_error) {
    die("Unbale to connect to the Server");
}

if (isset($_POST["login"])) {

    $uname  = $_POST["uname"];
    $lpass  = $_POST["lpass"];
    // LIMIT1
    $query  = "SELECT passwordFROM users WHERE username='$uname' LIMIT 1";
    $result = $con->query($query);
    // fetch all
    $dpass  = $result->fetch_assoc();

    // Check there is 1 result
    if ($result->num_rows == 1) {

        // check your password
        if ($dpass == $lpass[0]['password']) {
            echo "Passwords Match";
        } else {
            echo "Wrong Password";
        }

    // No User match
    } else {
        echo "No User foound";
    }

} else {}

我沒有嘗試該示例,但它應該可以工作。

進一步了解:

您可以使用password_hash()生成並可以使用password_verify()驗證密碼。

注意:始終養成對第三方的每個數據進行驗證,清理和轉義的習慣。 您可以從有關此主題的WordPress文章中獲取概念https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data https://vip.wordpress.com/2011/10/13/key-differences-between-validation-and-sanitization/

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM