我使用這個代碼在我登錄form.Everything工作:登錄表單的安全防範措施
$username = trim($_POST['username']);
$password = trim($_POST['password']);
$pass=md5($password);
$stmt = $mysqli->prepare("SELECT id FROM users WHERE username = ? AND password = ?");
$stmt->bind_param('ss', $username, $pass);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($id);
$stmt->fetch();
if ($stmt->num_rows == 1) { $_SESSION['name']=$id; echo'user logged in';}
else {echo'invalid username/password';}
$stmt->close();
但我應該用別的東西嗎?還是夠了?我是新準備的語句,所以我想知道語法是否寫得很好。
首先,你應該使用password_hash/password_verify而非MD5。 (不過,如果你已經將密碼存儲爲md5,它將不起作用。) –
準備好的聲明怎麼樣?寫得好嗎? – rimas
準備好的語句部分對我來說看起來很好,但是在保存密碼時需要確保它們不包含任何將被'trim'刪除的前導/尾隨空格。如果切換到使用password_hash + password_verify,則需要將其更改爲僅根據用戶名進行選擇,獲取記錄,然後驗證密碼。 –