[英]Can't login with real password in php
我有一個注冊表格和登錄表格。 我已經在注冊表格中使用了md5加密,並且工作正常。 但是,當我嘗試使用(123)之類的真實密碼登錄時,它並沒有登錄。另一方面,當我在md字段中復制粘貼md5加密時,它也正在登錄。請幫助我! 謝謝!
這是我的編碼:
<?php
if (isset($_POST['submit'])) {
$user_name = $_POST['username'];
$user_email = $_POST['email'];
$user_pass = $_POST['password'];
$query = "SELECT * FROM users where Email = '" . $_POST["email"] . "'";
$result = $obj->run_query($query);
if ($count = mysqli_num_rows($result) == 0) {
$query = "INSERT INTO users (Name,Email,Pass) VALUES ('$user_name','$user_email', md5('$user_pass'))";
$result = $obj->run_query($query);
echo "<script>alert('You have successfully Registered!')</script>";
echo "<script>window.open('welcome.php','_self')</script>";
} else {
echo "<script>alert('This user email $user_email is already exist!')</script>";
}
}
// login script
if (isset($_POST['login'])) {
$name = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['pass'];
$query = "SELECT * FROM users WHERE Email = '$email' AND Pass = '$password'";
$result = $obj->run_query($query);
if ($count = mysqli_num_rows($result) > 0) {
$_SESSION['email'] = $email;
$_SESSION['name'] = $name;
echo "<script>window.open('welcome.php','_self')</script>";
}
else
{
echo "<script>alert('Your email or password is incorrect!')</script>";
}
}
?>
如前所述:您正在比較POST數組中的純文本$password = $_POST['pass'];
到表中的MD5。
應該讀為$password = md5($_POST['pass']);
我還說過, “永遠”都不要接受這個。 如果它是實時站點,建議您暫停使用,直到使用安全的“本世紀”哈希函數為止。
MD5已有30多年的歷史,現在不再被認為可以安全地用於哈希/存儲密碼。
請參閱以下內容:
密碼
使用以下之一:
crypt()
bcrypt()
scrypt()
password_hash()
函數。 其他連結:
有關列長的重要旁注:
如果確實要決定使用password_hash()
或crypt,則必須注意,如果當前密碼列的長度小於60,則需要將其更改為該長度(或更大)。 手冊建議長度為255。
您將需要更改列的長度並以新的哈希值重新開始,以使其生效。 否則,MySQL將靜默失敗。
您當前的代碼也可以進行SQL注入 。 將mysqli
與預處理語句一起使用,或將PDO與預處理語句一起使用 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.