【问题标题】:Session hijacking and PHP会话劫持和 PHP
【发布时间】:2018-07-20 01:55:46
【问题描述】:

让我们只考虑服务器对用户的信任。

会话固定:为了避免固定,我只在身份验证(login.php)中使用session_regenerate_id()

会话劫持:整个站点的 SSL 加密。

我安全吗?

【问题讨论】:

  • 它是什么样的网站?
  • @MrXexxed 开发人员不希望它被黑客入侵的网站。
  • @The Rook,我在和 OP 说话,这是一个真正的问题,你的评论既搞笑又完全没有帮助。
  • @delete me 为什么重要?人们需要保护他们的用户免受会话劫持等攻击。令人遗憾的是,大多数开发人员不关心或不知道阻止此类攻击。

标签: php security session session-hijacking


【解决方案1】:

阅读 OWASP A3-Broken Authentication and Session Management。另请阅读 OWASP A5-CSRF,有时称为“会话骑行”。

您应该在 php 头文件中使用此代码:

ini_set('session.cookie_secure',1);
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);
session_start();

此代码阻止session fixation。它还有助于防止 xss 访问document.cookie,这是Session Hijacking 可能发生的一种方式。仅强制 HTTPS cookie 是解决 OWASP A9-Insufficient Transport Layer Protection 的好方法。这种使用 HTTPS 的方式有时被称为“安全 cookie”,这是一个可怕的名字。 STS 也是一个非常酷的安全功能,但并非所有浏览器都支持它(目前)。

【讨论】:

  • 您的回答至少值得 +10 分,我的投票让您得到了它。几个问题只是为了确保我理解:1)cookie_secure 会强制我在会话时始终在 https 上工作,不是吗?! 2)cookie_httponly 是做什么的?我阅读了 PHP 的解释,但是当它说阻止 JS 表单读取 cookie 时我不明白,实际上 cookie 在许多情况下应该由 JS 读取。谢谢,仅供参考:因为 PHP 5.3.0 session.use_only_cookies 默认为 1 it.php.net/manual/en/…
【解决方案2】:

我还建议将用户代理和 ip 信息存储在会话中,并在每次请求时对其进行验证。它不是万无一失的,但它在鲁棒性方面有了相当显着的提高。虽然 UA 锻造真的很容易,但 IP 锻造虽然可能,但要困难得多……但是您可能会对循环 IP 系统背后的用户(例如 AOL 用户)有疑问……

【讨论】:

  • “ip 伪造”或更通常称为 ip 欺骗,由于三次握手,不可能通过 Internet 进行 TCP 连接。但是,由于公司网络上的负载平衡器或 wifi 热点的变化,合法用户的 IP 地址可能会在会话期间发生变化。
  • 很有可能。它只需要 MITM 风格的攻击(攻击者可以访问其中一个端点路由器,然后可以做他们想做的事)......
  • 如果您可以访问路由到该 IP 的数据包,这不是“伪造”。
【解决方案3】:

我发现的最佳实践是将会话数据保存到数据库或文本文件中。 数据库将有用户代理和 IP 记录并检查每个请求以确保会话从未被其他人劫持。

例如会话如何保存在数据库中,您可以在 codeigntier 会话库中查看实现。在我看来,这种方式相当节省以防止有人劫持会话。

【讨论】:

  • 检查用户代理是没有意义的,因为这是攻击者控制的变量。将会话 ID 存储在数据库中意味着 sql 注入使攻击者可以立即访问系统,因此他无需破解密码哈希即可登录。检查 IP 地址很容易出错,因为这可能会在合法系统上发生变化,例如,如果他在公司网络上的负载平衡器后面。
  • @Rook - 您假设数据库容易受到 SQL 注入的攻击。正确使用准备好的语句或存储过程,以及适当的参数清理,将不允许 SQL 注入。
  • @Agmlauncher 这相当于在数据库中以明文形式存储密码。必须为失败做好计划。
  • Ok Rook,您如何提供一个实际的解决方案,而不是仅仅说其他所有(已证明)解决方案有什么问题?我只是觉得你认为数据库中的会话管理是一个坏主意很有趣。
猜你喜欢
  • 2011-09-22
  • 2011-12-09
  • 2011-07-02
  • 1970-01-01
  • 2013-01-17
  • 2012-02-20
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多