【问题标题】:Possible to emulate the death of a session-cookie in a cookieless site?可以在无 cookie 站点中模拟会话 cookie 的死亡吗?
【发布时间】:2011-11-07 17:05:32
【问题描述】:

我正在构建一个将在 iframe 中显示的网站/应用程序。我以前做过很多次,过去给我带来了很多问题……主要问题是跨域 cookie 被阻止。

我知道这是使用相同的根域名和设置 document.domain 的问题。但是考虑到可爱的新欧盟 cookie 立法(天哪,他们是蹩脚的)和浏览器在隐私和安全方面的总体方向,在 iframe 中使用会话 cookie 可能会变得越来越麻烦。因此,为了让网站稍微适应未来,我宁愿在完全不使用 cookie 的情况下实现它。

到目前为止,我的实现只是设置了一个查询字符串值,该值将传递到所有页面。我猜这有点像 ASP.NET 的无 cookie 会话功能。然而,这意味着如果有人使用公共计算机,稍后使用它的另一个人可以找到他们的 URL(包括会话 ID)并继续他们的会话。由于本网站处理不可接受的敏感数据。 ASP.NET cookieless 特性也存在同样的漏洞(这让我对找到解决方案有点悲观)。

我在 .NET 中进行开发,但这一定是所有环境的普遍问题。

短版:

有谁知道如何在 iframe 内运行的无 cookie 站点中维护会话状态(也许还有一些最佳实践)。当用户关闭他的浏览器时,必须有效地终止会话,因此浏览器历史列表不会泄露任何信息 - 就像使用普通会话 cookie 一样。

可能的解决方案

我正在考虑这些方面的事情。但这远非最佳。

  1. 页面不断向服务器发出保持活动的 ajax 请求
  2. 服务器使用查询字符串中存储的 ID 的最后一次 keep-alive 调用更新时间戳
  3. 如果 keepalive 时间戳超过 10 秒,则与 ID 相关的数据将被终止,如果用户重新访问具有现已失效 ID 的 URL,则会收到“会话超时 - 请重新开始”消息.

【问题讨论】:

    标签: security session-state cookieless


    【解决方案1】:

    我知道这是使用相同的根域名和设置 document.domain 的问题

    不 - 使用单点登录是一种更明智的方法(尽管仍然使用 cookie)

    但考虑到可爱的新欧盟 cookie 立法(天哪,他们是蹩脚的)

    Go read it,特别是注释 25 和 26。有大量的退出条款。提供详细说明隐私信息的页面仍然是一种很好的做法和服务,这可能足以甚至超过该法案规定的任何义务。但请务必设计您的网站以检测用户不接受 cookie 的位置并使其做出适当的响应。

    我宁愿完全不使用 cookie 来实现它。

    相信我,你不会。您已经提到通过 URL 传播会话 id - 这是唯一接近替代品的东西,但除了您提到的安全问题之外,它还非常脆弱和限制性(例如,对于您的 ajax 调用,您将必须解析当前 url 以提取会话 id 并将其插入到后续请求中)。

    请注意,所有这些都假设您的网站需要在服务器端保留状态(这在某种程度上暗示了敏感数据和身份验证)。

    【讨论】:

    • “它也非常脆弱和限制性”: 是的,它非常严格,我什至不会考虑将它用于完整的站点(我什至不会考虑无论如何在 iframe 中运行)。但这是一个类似向导的订阅流程,有 5 个步骤,您只能前进和后退,因此易于管理。
    • “不 - 使用单点登录是一种更明智的方法(尽管仍然使用 cookie)” 我不确定您的意思。该站点不包含任何类型的登录机制——单点登录如何适应这种机制?我需要的只是一种维持状态的方法(这很可能是不可能的,但我想在完全驳回这个想法之前我会问一下)。除了“仍然使用 cookie”之外,这有点违背了目的。
    • “去阅读它,特别是注释 25 和 26”: 为了不把这变成关于 cookie 立法的旧约讨论 - 让我们“同意不同意”:o )
    猜你喜欢
    • 2014-06-20
    • 2013-02-18
    • 2015-11-10
    • 2023-03-05
    • 2015-11-16
    • 2014-11-19
    • 1970-01-01
    • 2011-12-15
    • 2011-01-01
    相关资源
    最近更新 更多