4

当用户登录时,我使用以下策略对用户进行身份验证:

  1. 用户名密码与唯一的令牌会话标识符一起存在于数据库中
  2. $_SESSION['logged_in'] = true如果以上返回 true,则设置会话变量
  3. 在每个页面(基本控制器)上检查if ($_SESSION['logged_in'] > 0),否则会重定向到登录页面。

黑客是否有可能以某种方式设置$_SESSION['logged_in'] = true; ? 上述策略是否存在安全问题?

请给我一篇文章或任何可以帮助我使它更安全的东西。

4

3 回答 3

7

会话存储在服务器上,因此用户不可能修改会话中的任何内容,除非他闯入您的服务器 - 在这种情况下,他显然可以运行$_SESSION['logged_in'] = true;或执行任何其他操作来规避代码中的任何安全措施。

唯一存储在客户端的是会话 ID cookie。这是一个随机的 32 个字符的散列,不包含任何数据。

于 2013-08-05T19:06:54.370 回答
0

在 PHP 中使用会话时,访问者浏览器会存储一个 cookie,其中只存储一个会话 ID。此会话 ID 在后续请求中传递回您的服务器,当您发出请求时,session_start()服务器通常会打开一个具有该唯一会话 ID 名称的文件。这是存储数据的地方。

默认会话 ID 很长,因此攻击者需要很长时间才能暴力破解并猜测其他人当前经过身份验证的会话。如果需要,可以调整 cookie 的长度。

只要您的会话在适当的时间范围内过期,并且服务器正确删除过期的会话数据,您就不会有任何问题。

于 2013-08-05T19:07:43.280 回答
0

除非您的代码中有一些安全问题,否则“黑客”将无法设置会话变量(没有代码 -> 无法判断,抱歉)

但是我在提供的代码中看到了一个问题。请在步骤 3 中使用 isset 而不是 >0。严格的错误设置会在此处向您发出警告。请仅使用严格的错误设置(更好的代码,行为是可预测的)和实时站点的“正常”设置进行开发。

如果您真的有安全问题,请付钱请专业的 PHP 程序员检查您的代码或在此处发布。

于 2013-08-05T19:11:49.847 回答