【问题标题】:User authentication- Security risk passing session cookie over HTTP?用户身份验证-通过 HTTP 传递会话 cookie 的安全风险?
【发布时间】:2012-04-05 10:06:47
【问题描述】:

我的网站上有一个“客户中心”,只能通过 HTTPS 访问。我目前正在使用单个会话 cookie 来跟踪 PHP 会话变量,例如 User_Authenticated、Client_ID 等,一旦他们登录。

我想在他们登录后将导航栏上的链接从“登录”更改为“注销 | 客户中心”。这很简单,但我的大多数网站都有指向 HTTP 而不是 HTTPS 的绝对链接.我可以让我的所有链接都是相对的,这样一旦他们登录就可以让它们保持在 HTTPS 上,但是我的网站是图形密集型的,我不能保证它们会保持在 HTTPS 上(例如,如果他们登录后在浏览器上输入http://mysite.com)。

我的问题如下:

1) 通过 HTTP 传递此 cookie 是否存在风险?我听说它可以被拦截和欺骗。那会很糟糕!

2) 对于导航栏上的链接,我可以使用两个 cookie,一个是包含其凭据的 secure_only cookie,另一个只是让浏览器知道他们是否已登录?是否可以像这样使用不同的 cookie 同时使用多个会话?

我还听说过使用基于数据库的会话管理系统,但目前这还远远超出了我的想象。我是 PHP 和 MySQL 新手(这是我的第一个网站)。

提前致谢!

【问题讨论】:

  • 为什么不使用标准会话,它将所有实际会话数据存储在服务器上,只在客户端留下一个 ID?在任何情况下,任何 HTTP 都可以很容易地被嗅探到。
  • 啊,是这样的吗?这就是我正在做的事情(我认为)。

标签: php http session https session-cookies


【解决方案1】:

您可以使用第二个 cookie 做您想做的事。然后您可以将会话 cookie 用于 HTTP 和 HTTPS 页面(以获取登录状态),但仅使用第二个 HTTPS-only cookie 进行身份验证。

我写了一个article,描述了如何分离这两个关注点,维护会话和身份验证。即使您决定对整个站点使用 HTTPS,这也是一件好事。

不过,我会考虑对整个站点强制执行 HTTPS,这会让您的生活更轻松。如果您的网站流量不是很高,那么对于今天的服务器来说应该没问题。

【讨论】:

  • 谢谢!这正是我一直在寻找的。你是我的英雄! :o)
【解决方案2】:

通过 http 传递身份验证 cookie 是个坏主意。这就是 firesheep 揭露的问题,也是 Google、Facebook 和 Twitter 等现在一直鼓励(或要求)https 的原因。

如果您担心网站上的会话劫持,那么您应该为需要保护的每个页面和资产强制执行 https。理想情况下,对所有资产强制执行 https,以避免令人讨厌的关于页面上混合安全性的浏览器警告。

【讨论】:

  • 所以基本上我需要为我的整个网站强制使用 HTTPS。不过我很好奇,例如,StackOverflow 没有使用 HTTPS,他们正在传递会话 cookie 来验证用户,对吧?我的名字在页面顶部,我可以点击它来查看我的个人资料,我可以在不登录的情况下发帖等等。他们不是使用 cookie 进行身份验证吗?
  • 是的,而且 StackOverflow 很可能容易受到火羊式攻击。只有当您在公共 Wi-Fi 热点(或其他公共网络)中使用 SO 并且有人正在捕获您的网络流量时,它才会真正成为一个问题。如果他们可以捕获您的会话 cookie,他们就可以劫持您的会话。我不太担心我的 SO 会话,但比说 gmail 会话。
  • 好的,太好了。再次感谢您花时间帮助我处理这个 Andrew。我非常感谢它!
【解决方案3】:

【讨论】:

  • 这就是我最初所做的,但我在共享主机上,额外的开销正在扼杀我网站的性能。如果只有经过身份验证的用户通过 HTTPS 查看它,我不介意,但大多数访问者不会是会员。
  • 为什么不把会员专区和公共网站分开,会员专区少图形。
  • 通过重写,在重定向到 HTTPS 之前,您仍然可以明文发送初始请求。如果你不小心,你可能会在那里泄漏cookie。
猜你喜欢
  • 1970-01-01
  • 2012-03-26
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 2010-11-13
  • 2020-03-15
  • 2012-10-09
  • 1970-01-01
相关资源
最近更新 更多