【问题标题】:Alternative to HTTP Cookies?HTTP Cookie 的替代方案?
【发布时间】:2010-07-20 05:44:49
【问题描述】:

他们说 Cookie 是 bad。我个人认为应该有一种“更智能”的方式来检测网络应用上的用户状态。

说,目前这就是它在 xyz.com 有许多池​​和服务器(我知道的)的分布式环境中的工作方式:

  1. 用户登录 xyz.com
  2. xyz.com 的登录模块在客户端的本地计算机上放置一个 cookie。
  3. 现在,当客户端访问 xyz.com 的 Feature1 时,feature1 池检查本地 cookie,如果他找到它并且如果它没有过期,那么 Feature1 假定客户端是好的并让他进入。李>

所以,由于登录模块丢弃的cookie,feature1盲目信任客户端。

但我觉得在第 3 阶段存在一个根本性缺陷。如果黑客克隆了一个 cookie 并试图做某事怎么办? (这是黑客尝试做的第一件显而易见的事情,cookie 嗅探)

那么,有什么替代方法吗? - 未来网络存储、闪存存储对象将如何做?还是 cookie 会统治?

不寻找一个明显的答案,因为没有。我对处理这个问题的不同观点感兴趣。

谢谢

【问题讨论】:

  • 我投票结束这个问题,因为它明确要求讨论和意见。 不寻找一个明显的答案,因为没有。我对处理这个问题的不同观点感兴趣。
  • 我不同意结束这个问题,这是一个当今不断发展、可行和最佳解决方案不断发展的问题。
  • 设备指纹识别也很有趣。

标签: cookies


【解决方案1】:

有很多(2021 年更新):

我相信this resource from google 和/或this link 中的信息将帮助您找到在客户端保存信息的替代方法。

基本上...目前有 4 种不同的方法可以在不使用 cookie 的情况下在客户端存储数据:

  1. Local StorageSessionLocal 键/值对)
  2. Web SQL(我最喜欢,它是一个完整的 SQL 数据库,还有it's NOT obsolete
  3. IndexedDB(另一个具有不同结构和接受度的数据库)
  4. Service Workers(持久的后台处理,即使在离线时,也可以异步保存文件和许多其他事情)

我相信,对于您的特定需求,本地存储对是最简单的解决方案。

【讨论】:

  • 请注意,使用 localStorage 和 sessionStorage 在您的页面上运行的任何和所有 Javascript 脚本都可以访问它。因此,将您的安全凭证(令牌、用户名、密码或其他)放在那里并不是最好的主意。更多信息:dev.to/rdegges/please-stop-using-local-storage-1i04
  • @seBaka28 1) 通常可以避免在任何地方以明文形式存储密码。 2)根据定义,您页面上的所有 JS 都可以访问网页的内容,包括登录表单。
  • @curiousguy 1) 非常同意 2) 仍然有很大的不同,例如仅在您登录后添加的脚本(一些用于裁剪个人资料图片或其他的js),这些脚本仍然可以访问localStorage,但不能访问登录表单
  • @seBaka28 2) 登录表单可以在任何页面上。这取决于您的浏览器是否“自动填写”所有表单(无需任何用户操作),即使是那些不可见的表单,以及您是否保存密码。如果这样做,密码可以通过任何页面上的脚本恢复。
  • 很有趣,所以...一种解决方案是像大的那样为登录过程设置一个单独的页面?
【解决方案2】:

REST 的基本原理之一,我的意思是real REST 不是在服务器上存储状态,如果服务器上没有状态,那么就不需要使用 cookie 作为查找该状态的键。

【讨论】:

  • 您能否详细说明一下,在我上面描述的场景中这将如何工作?
  • 你不需要cookies来跟踪服务器上的状态,没有,你在每次请求时将状态从客户端传递给服务器,阅读关于REST的链接很容易理解
  • @makerofthings7 您在每个请求上传递凭据,这是状态的一部分,如果您认为需要 cookie,您不明白 stateless 是什么意思或安全身份验证安全所需。像 SSL 这样的端到端加密使事情变得安全,而不是 cookie。
  • @JarrodRoberson 你能给我看一个这种方法的示例吗?它适用于基于表单的身份验证?我知道在每个请求上发送凭据的唯一方法是使用隐式 Kerberos、NTLM 等。这不适用于 OAuth、OpenID、WS-Trust、Facebook 等......
  • @makerofthings7 你会从阅读中学到更多的理解,而不是争论一个没有任何事实依据的观点。我试图解释您混淆了多个不相关的事物,并且您更有兴趣根据不完整的理解来争论您的有缺陷的观点。编码状态的方法有很多种,cookie 是最糟糕的一种。祝你好运。
【解决方案3】:

您需要使用 cookie prefixes 的安全 cookie。 Cookie 前缀 __Secure-* 和 ___Host-* 确保您的 cookie 仅由安全连接设置和发送,从而防止 cookie 嗅探和中间人攻击。

为了提高安全性,您可以强制您的用户仅从特定 IP 地址的白名单登录。

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 2012-01-18
    • 2018-03-09
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 2017-08-01
    • 2015-06-13
    相关资源
    最近更新 更多