【发布时间】:2014-08-19 15:47:26
【问题描述】:
我有一个网站,用户可以在其中登录并设置两个会话变量:
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 只是数据库中用户详细信息的自动递增数。我能做些什么来使用户登录检查更加健壮吗?
【问题讨论】:
-
最佳实践/安全问题:codereview.stackexchange.com
-
你也可以记录用户 ip、用户代理等,以防止会话劫持。您还可以将密码哈希保存在会话中,并根据数据库检查它以在密码更改后使打开的会话无效,但您所拥有的可能没问题
-
如果您使用参数化查询,则不应转义字符串。参数绑定已经保护了数据,如果您添加任何转义,它们将被视为文字数据。