我有一个网站,用户可以登录,当他们做两个会话变量时设置:
if (validate_password($password, $user_hash))
{
$_SESSION['usrnam'] = $username;
$_SESSION['uid'] = $user_id;
$stmt -> close();
$con -> close();
dirto_homepage();
exit();
}
然后我会检查以显示页面上的元素:
if (isset($_SESSION['uid']) && isset($_SESSION['usrnam'])) {include ".....";}
和......
$auth_id = $con -> real_escape_string($_SESSION['uid']);
$message = $con -> real_escape_string($_POST['message']);
$stmt = $con -> prepare("UPDATE `db_table` SET `data` = ?, `date_mod` = ? WHERE `id` = ? AND `author_id` = ?")
这样做安全吗? - uid只是数据库中用户详细信息的自动增量编号。有什么办法可以让用户登录检查更健壮吗?
答案 0 :(得分:1)
如果您将其作为预设语句的绑定参数提供,则使用real_escape_string
是错误的。绑定参数按字面处理,绑定机制负责保护值,因此您将转义字符存储到数据库中,这是您不想要的。如果你将值替换为SQL字符串,则转义只是necarry。
对于会话检查,这看起来很好。会话数据全部存储在服务器上,客户端只发送链接到它的会话ID,因此它们不能欺骗特定的会话值。有人可以做的唯一事情就是猜猜其他人的会话ID,然后他们就可以劫持他们的会话。没有太多可以做的事情来保护它。
答案 1 :(得分:-1)
这是关于该主题的深入文章
http://shiflett.org/articles/the-truth-about-sessions, https://security.stackexchange.com/questions/23929/creating-secure-php-sessions
会话永远不会有100%的安全性......
不要相信这些贬低者,Chris Shiflett的文章非常宝贵。
在另一个帐户上见到你。 ;)