当用户登录当前会话时,设置了变量
$_SESSION['user']['timeout'] = time();
$_SESSION['user']['ip'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['user']['agent'] = $_SERVER['HTTP_USER_AGENT'];在我的common.php页面(所有php页面都需要),我使用了下面的脚本,它在用户每次活动时重置15分钟的计时器,然后检查IP地址和user_agent,如果它们不匹配,当他们第一次登录时/当第一次设置会话时,会话被取消设置,而且长达15分钟的不活动会话也被取消设置。
..。我所做的是一个防止会话劫持的好方法吗?此外,它是否安全,或者是否足够?如果没有,还能做些什么呢?
if(!empty($_SESSION['user'])){
if ($_SESSION['user']['timeout'] + 15 * 60 < time()) {
unset($_SESSION['user']);
} else {
$_SESSION['user']['timeout'] = time();
if($_SESSION['user']['ip'] != $_SERVER['REMOTE_ADDR']){
unset($_SESSION['user']);
}
if($_SESSION['user']['agent'] != $_SERVER['HTTP_USER_AGENT']){
unset($_SESSION['user']);
}
}
}发布于 2012-11-13 07:35:52
使用15个缩略图的限制,您可以确保如果会话被劫持,攻击者将无法长时间使用它,而用户离开他/她的机器或将其关闭(并且尚未注销)。但是用户工作的时间和攻击者劫持会话的时间又如何呢?检查ip地址是一个好主意,但它有一个很小的限制。而用户没有固定的ip地址,并且他/她已经从网络断开并重新连接。将为其分配一个新的ip地址。并且这种情况迫使他的会话到期,而他是有效用户。此外,这个技巧不会为攻击者做任何事情,因为他们在同一个私有LAN中,具有有效的用户,并且他们都在具有公共ip地址的网关后面。因为它们在您的服务器中具有相同的ip地址( NAT或网关的ip地址)。在我看来,你所做的是好的。但更好的做法是确保网站不受XSS和CSRF攻击。阻止客户端中的javascript注入。如果防止任何此类攻击如此重要,还可以使用ssl来防止网络嗅探器的攻击。
https://stackoverflow.com/questions/13352988
复制相似问题