我的代碼:會話ID的md5(時間())
if ($usernamelogin == $dbusername && $passwordlogin == $dbpassword)
{
$hash = md5(time());
mysqli_query($connection, "UPDATE users SET sessionid='$hash' WHERE username='$usernamelogin' AND password='$passwordlogin'");
$_SESSION['id'] = $hash;
$_SESSION['un'] = $usernamelogin;
}
else
{
echo ('Wrong username or password.');
}
然後我使用$會話ID,在SQL會話ID和用戶名,以驗證用戶是否是真實的。這意味着,假設我有防SQL注入的保護,安全風險相對較少,對吧?
我來這裏問,因爲這看起來像一個過於簡單的解決方案,一個複雜的問題。我去過的所有文件和網站都實施了更復雜,更易混淆,並且有時不安全的方法來驗證用戶是否已登錄。
這是安全嗎?
請告訴我你沒有在數據庫中以純文本存儲密碼?如果你那麼**沒有**你不安全。另外,如果您不使用SSL,會話可以被攔截。即使你是,許多「最佳實踐」指南建議經常更新會話ID(5-10分鐘)。最後,爲什麼選擇一個可預測的會話ID?如果有人可以粗略地猜測會話何時被創建,他們可以猜出該id(以小範圍)。使用GUID/UUID – Basic
我還沒有切換,但沒有我不會以純文本格式存儲它們。我仍處於開發階段。 –
哦,你也容易受到SQL注入的影響。嘗試輸入密碼「pass」; DROP TABLE用戶 - '(好吧,不要但你明白了)。 – Basic