【发布时间】: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 发送的登录用户。
【问题讨论】:
-
您可能会发现
Session::start()很有帮助,如this standalone library 中所示。这提供了比默认会话 cookie 更好的安全性。
标签: php security session cookies ssl