我想通過使用password_hash和PDO準備語句來防止SQL注入來提高我的安全性。我已經使用MySQLi OOP和Procedural。我正在嘗試轉向PDO並想學習。 所以我創建了一個使用PDO的註冊表單,它已經在工作,密碼的加密也在工作。但是,即使使用正確的用戶名和密碼登錄,我也無法登錄。Php註冊和登錄password_hash密碼默認使用pdo
這是我用來在註冊表單中填入密碼的代碼。
$password = $_POST['password'];
$hash = password_hash($password, PASSWORD_DEFAULT);
然後我用準備好的語句執行它。所以在這裏沒有錯誤一切正常。
但是,當我嘗試登錄時,它不會將我重定向到它應該在的着陸頁。
因此,這裏的代碼將我登錄
<?php
session_start();
$host = "localhost";
$username = "root";
$password = "";
$database = "PDOtesting";
$message = "";
try
{
$connect = new PDO("mysql:host=$host; dbname=$database", $username, $password);
$connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if(isset($_POST["login"]))
{
if(empty($_POST["username"]) || empty($_POST["password"]))
{
$message = '<label>All fields are required</label>';
}
else
{
$query = "SELECT * FROM users WHERE username = :username AND password = :password";
$statement = $connect->prepare($query);
$statement->execute(
array(
'username' => $_POST["username"],
'password' => $_POST["password"]
)
);
$count = $statement->rowCount();
if($count > 0)
{
$_SESSION["username"] = $_POST["username"];
header("location:login_success.php");
}
else
{
$message = '<label>Wrong Data</label>';
}
}
}
}
catch(PDOException $error)
{
$message = $error->getMessage();
}
?>
我應該也包括我把它在註冊的password_hash功能?我應該在哪裏放置代碼。 尋求幫助。 在此先感謝。
查詢用戶僅;得到你的查詢結果並使用'password_verify'函數比較它,如果它工作的話讓它成功,否則它不是......''password_hash'在每次使用它時會爲同一個字符串生成不同的密碼,因爲它每次產生隨機鹽正在使用 – ahmad