【问题标题】:Are the cookies for PHP sessions secure?PHP 会话的 cookie 是否安全?
【发布时间】:2011-06-11 20:52:31
【问题描述】:

我正在尝试保护我的会话。在做一些研究时,我认为 PHP 的 PHPSESSID+基于代理和 IP 的随机哈希足以防止劫持。你还能做什么,真的。

我使用 HTTPS 进行登录。据我所知,PHP 的会话数据永远不会发送给用户,而是存储在服务器端。客户端仅获取会话的 ID。会话数据包含实际 webapp 的用户会话,该会话又用于检查登录是否有效。一切都很好。

但是,有一个我在任何地方都找不到的细节。我想知道如果我使用 HTTPS,包含 PHP 会话 ID 的 cookie 是否会自动标记为安全。我做了一些谷歌搜索,但似乎从来没有得到正确的搜索字符串,因为我只能找到手动发送 cookie 的方法。我想知道,因为如果该 cookie 以明文形式发送,它会通过中间人损害某些安全性。

编辑 1

这是对@ircmaxell 的补充

我尝试了你的方法,但不知何故,当我从 HTTPS 切换回 HTTP 时,我仍然得到了 cookie。它应该工作的方式如下。只要服务器知道用户会话可用,它就会设置安全标志。这意味着整个站点在您登录后立即在 SSL 上运行,并且在您不使用 SSL 时拒绝放弃/使用 cookie。或者至少,是这样的。

if ($SysKey['user']['session_id'] != '') {
   session_set_cookie_params(60*60*24*7, '/', $SysKey['server']['site'], true, true);
}

我假设我需要重新生成 id,因为浏览器在登录之前已经有了 cookie,但由于我只能在几个小时内尝试,所以在尝试之前我会在这里询问

解决方案说明

我刚刚发现您必须在开始会话之前设置这些设置。那是我的问题。我现在使用 2 种不同的 cookie。一个用于通过 http 发送的普通访客,另一个用于仅通过 ssl 发送的登录用户。

【问题讨论】:

标签: php security session cookies ssl


【解决方案1】:

甚至不要考虑滚动您自己的会话处理程序!

PHP 的会话已多次中断,因此现在它比以往任何时候都更加安全。当发现一个新问题时,它会很快得到修复,并且免费。 但是,您可能需要添加以下选项:

session.cookie_secure=True
session.cookie_httponly=True
session.use_cookies=True
session.use_only_cookies=True

【讨论】:

  • 我并没有考虑推出我自己的会话处理程序(我在问这个问题之前,但后来得出结论认为这是不必要的),而是考虑通过添加我自己的处理程序作为php 会话处理程序之上的附加层。但感谢您的警告。几个小时后我会试试你的选择。
【解决方案2】:

我认为您正在寻找的功能是session_set_cookie_params(...)。它将允许您设置 secure cookie 标志以使其仅 https。

您可以通过以下方式查看:session_get_cookie_params()

【讨论】:

  • 我需要重新生成phpsession吗?因为我在手动从 HTTP 切换回 HTTPS 后仍然得到 cookie。有关更多信息,请参阅我的编辑。
  • 我刚刚发现您必须在开始会话之前设置这些设置。那是我的问题。我现在使用 2 种不同的 cookie。一个用于通过 http 发送的普通访客,另一个用于仅通过 ssl 发送的登录用户。通过 session_name() 来回切换;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 2012-04-12
  • 2016-04-08
  • 2023-03-12
相关资源
最近更新 更多