2017-01-24 98 views
0

我想驗證我的數據庫中使用password_verify()函數的哈希密碼,但它似乎並沒有工作。請任何幫助。password_verify()不驗證

<?php 
include("config.php"); 
include("vendor/password.php"); 

session_start(); 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 

    $username = mysqli_real_escape_string($db , $_POST['umail']); 
    $password = mysqli_real_escape_string($db , $_POST['upassword']); 

    $userQuery = "SELECT username, password FROM users WHERE username = '$username' AND password='$password'"; 
    $result = mysqli_query($db ,$userQuery); 
    $queryRow = mysqli_fetch_array($result , MYSQLI_ASSOC); 
    $queryCount = mysqli_num_rows($result); 


    $verifyPassowrd = password_verify($_POST['upassword'] , $queryRow[2]); 

    if ($verifyPassowrd){ 
    header("Location:home.php"); 
    }else{ 
    echo "Username Or Password is invalid"; 
    } 
    mysqli_close($db); 
} 
?> 
+2

確保你***不要逃避密碼](http://stackoverflow.com/q/36628418/1011527)** *或在哈希之前使用其他任何清理機制。這樣做*更改密碼並導致不必要的附加編碼。 –

+0

[Little Bobby](http://bobby-tables.com/)說*** [你的腳本存在SQL注入攻擊風險。](http://stackoverflow.com/questions/60174/how-can- ***)瞭解[MySQLi](http://php.net/manual)[準備](http://en.wikipedia.org/wiki/Prepared_statement)聲明/en/mysqli.quickstart.prepared-statements.php)。即使[轉義字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! [不信?](http://stackoverflow.com/q/38297105/1011527) –

+1

'password_hash()'函數可以生成一些非常冗長的文本(當前的默認值是60個字符),因此使數據庫現在儘可能大的場地將允許所需的長度。其次,PHP團隊正在向該方法添加更多算法,這意味着哈希可以並將會增長。我們也不想限制用戶使用他們選擇的密碼或密碼的能力。最好爲變化留出空間。 –

回答

1

您的密碼在您的數據庫中被哈希。
在您的查詢中包含非哈希密碼,因此查詢結果將爲空集。

因爲您想檢查password_verify函數中的返回哈希,所以不需要在查詢的WHERE子句中輸入密碼。

更新摘要(我也是固定錯字的):

<?php 
include("config.php"); 
include("vendor/password.php"); 

session_start(); 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 

    $username = mysqli_real_escape_string($db , $_POST['umail']); 

    $userQuery = "SELECT username, password FROM users WHERE username = '$username'"; 
    $result = mysqli_query($db, $userQuery); 
    $queryRow = mysqli_fetch_array($result, MYSQLI_ASSOC); 
    $queryCount = mysqli_num_rows($result); 


    $verifyPassword = password_verify($_POST['upassword'], $queryRow['password']); 

    if ($verifyPassword){ 
    header("Location:home.php"); 
    }else{ 
    echo "Username Or Password is invalid"; 
    } 
    mysqli_close($db); 
} 
?> 
+0

非常感謝@Blaatpraat它完美的工作。感謝您的額外建議。我剛開始學習php。 – dela

+0

@dela沒問題,這就是爲什麼。我也建議你認真聽取給定意見的建議。尤其是對SQL注入的評論。 :) – Blaatpraat