会话只存储在浏览器中吗?

时间:2012-07-28 01:38:51

标签: php session cookies brute-force session-hijacking

我的网站遭到暴力攻击,攻击者试图访问用户帐户。机器人没有用户代理。我有一个系统阻止一个人在10分钟内超过每次帐户3次尝试登录。

我还检查了用户代理,如果没有,请退出。

我的问题是:会话是否仅存储在浏览器中?我在想的是他们正在使用通过命令行执行的脚本。

我也实现了这个:

if(!isset($_COOKIE[ini_get('session.name')])) {
header("HTTP/1.0 404 Not Found");
exit;
}

我还能做些什么来阻止这些攻击吗?

1 个答案:

答案 0 :(得分:16)

会话变量的内容存储在服务器上,但会话由会话ID标识,会话ID存储在客户端并随每个请求一起发送。通常会话ID存储在cookie中,但也可以附加到URL的。

在Wiki上的session hijacking上有一个非常有趣的读物,在PHP Security Consortium有一个有趣的读物,可以让你更好地了解劫持是什么以及如何防止它。

有很多方法可以帮助防止这些攻击,我已经指出了三个:

  • 用户成功登录后使用PHP的session_regenerate_id()。 这会创建一个新的会话ID,与第一次访问公共/安全区域时创建的会话ID不同,如果当然有会话启动的话。
  • 成功登录后记录用户的IP地址,会话ID和用户代理。检查每个请求的IP和用户代理,如果IP和代理与此会话不匹配,请重新登录。但请注意,有时用户的IP可能会改变并可能使某人烦恼。另请注意,用户代理也很容易被欺骗。
  • 使用SSL / TCL隐藏请求中发送的信息。