我的代码:会话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