【问题标题】:Security of locally stored cookies本地存储 cookie 的安全性
【发布时间】:2015-11-23 15:46:00
【问题描述】:

如果 cookie 仅存储在本地客户端的浏览器上,并且从不通过 Internet 发送到服务器,它是否安全?

编辑 - 我正在制作一个加密文件服务,它的工作方式是用户有两个密码,一个用于登录他的帐户,另一个用于加密和解密他们的文件。登录后,他们会看到一个窗口,要求他们输入解密密码。此密码存储在用户浏览器上的 cookie 中。从服务器发送加密的文件列表,javascript 使用 cookie 对其进行解密(并在浏览器中加密上传的文件一次,然后 php 在服务器上对其进行加密)。这是一种安全的做事方式还是更好的方式?附言我确实使用 SSL,但我正在尝试增加更多安全性

【问题讨论】:

  • 您可能想要充实您的问题并在 security.stackexchange.com 上提出问题——我认为这不太适合 SO。
  • @Two-BitAlchemist 是对的。我会用 1-2 页来回答这个问题,但简而言之;使用 HTML5 的本地存储功能来存储密钥而不是 cookie。

标签: security cookies


【解决方案1】:

每个请求都会发送一个 cookie。因此,如果您在浏览器上使用标头设置 cookie:

Set-Cookie: Password=foo

那么即使从你的服务器请求图片:

<img src="/images/bar.jpg" />

请求将包含已设置的 cookie:

Cookie: Password=foo

取而代之的是HTML5 session storage is recommended。会话存储对于每个浏览器选项卡都是唯一的,并在用户离开页面时被清除。它只能通过 JavaScript 读取,并且不会针对每个请求自动发送。

此外,由于您将拥有一个本地攻击者可以读取的密码,并且基于密码的密钥仅与密码一样安全,因此建议使用 JavaScript PBFDF2bcrypt implementation 以加强钥匙。这将使任何加密对象更难通过暴力攻击解密,因为每个密码尝试都需要通过哈希函数运行,从而大大减慢了攻击速度。这也意味着如果在客户端上查看存储,密码将无法以明文形式查看。虽然这可能是一个有争议的问题,因为如果攻击者可以读取加密密钥,即使它是散列的,他们仍然可以解密数据,尽管如果用户在其他系统上重用了他们的密码,它将无法被逆向工程在那里使用。

【讨论】:

    猜你喜欢
    • 2020-01-10
    • 2023-03-29
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 2019-03-05
    • 2019-03-28
    相关资源
    最近更新 更多