首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP -会话安全性和可靠性

PHP -会话安全性和可靠性
EN

Stack Overflow用户
提问于 2017-07-26 15:38:28
回答 1查看 956关注 0票数 2

我目前正在学习PHP,我想出了一个关于会话的问题。在撰写这篇文章之前,我已经阅读了一些有关这个主题的信息和主题,比如this one,但是其中大部分内容都有些陈旧,所以我想确定一下我是用正确的方式处理它们的。

因此,下面是我的问题:假设以下项为真,

  • 登录时,我使用session_regenerate_id()重新生成PHP会话ID;
  • 登录时,我将创建一个会话变量,其中包含一个隐藏的代码(它结合了用户IP、浏览器以及开始和结束时的一些随机内容)。

$_SESSION['check'] = hash('ripemd128', $rand1 . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . $rand2)

该值被发送到数据库,并且,在每个页面中,我都在检查数据库上的值是否与该$_SESSION['check']变量匹配;

  • 我强迫用户通过ini_set('session.use_only_cookies', 1)启用cookie,并设置了ini_set('session.use_trans_sid', 0)
  • 注销时,我使用以下代码:

$_SESSION = array(); setcookie(session_name(), '', time()-259200, '/'); session_unset(); session_destroy();

这样,并且假设将值放入会话变量得到了正确的验证,我是否可以100%地信任会话变量?如果没有,我可以改进/改变什么以使他们更安全?

我之所以问这个问题,是因为当用户登录时,我会将一些信息保存到会话变量中,以避免将数据库中的查询重载,所以我需要确保这些信息不会被破坏。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-26 15:55:01

整个舞蹈和歌曲的哈希(不是“野营”!)带有一些随机值的用户代理和IP是非常多余的。我也不认为在每个请求中用它来干扰数据库是有意义的。

这有什么好处,你想阻止什么?如果有的话,你想要防止会话劫持。让我们详细研究一下:

  • 会话劫持意味着中间人或其他第三方能够窃取用户的会话cookie。您可以简单地使用HTTPS来防止这种情况,这是您唯一能做的真正的事情。
  • 如果用户电脑上的恶意软件偷了cookie而不是MitM,那么HTTPS就没用了。在这种情况下,攻击者可能会完全坐在其他地方。在这种情况下,检查IP会有帮助。检查用户代理在很大程度上是多余的,因为它可以很容易地被模仿。
  • 要检查IP,只需将IP直接存储在会话中,并执行一个简单的if ($_SESSION['ip'] !== $_SERVER['REMOTE_ADDR']);散列不会向该进程添加任何内容。
  • 请注意,IP可能突然发生合法更改,从而使登录无效。
  • 请注意,能够窃取某人的cookie的恶意软件可能会从他们自己的计算机上冒充用户的权限,在这种情况下,任何检查都不会做任何事情。

底线:任何额外的检查和保护都是无用的。如果您正在使用HTTPS,而且仍然有人能够劫持会话,那么您基本上都是SOL。别费神。如果您没有使用HTTPS,那么现在就开始使用它--

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45331576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档