繁体   English   中英

在本地存储中保护浏览器端缓存

[英]Secure browser-side cache in Local Storage

要明确问题:以下提案是否被视为“安全”? (即不会带来任何重大的安全风险)。

我没有看到任何明确的理由为什么下面的提案会被认为是完全不安全的(例如,'甚至不打扰',这似乎是对'本地存储'和'安全'这两个词的快速回答标题)。 从根本上说,它基于以下前提:您可以访问内存中的敏感数据和缓存,也可以访问两者。

起点

我有一个Web应用程序,其中包括服务器端Web服务和在浏览器中运行的javascript,它们调用这些Web服务(安全地,通过HTTPS,这不是问题)并在网页中显示数据。 假设它是一个显示您的电子邮件的电子邮件应用程序 - 即它是您不想与他人共享的敏感数据。

在这个阶段需要注意的几点:

  • 用户已经对服务器进行了身份验证,并且浏览器中运行的javascript能够调用服务器的Web服务来检索数据。
  • 浏览器中运行的javascript也可以访问该页面,并且该javascript可以使用所有(敏感)信息。 敏感数据是“内存中”并且可用于javascript(是的,包括任何恶意注入的javascript)。

到目前为止,它是一个标准的Web应用程序,我假设任何读者都会觉得这被认为是“可接受的安全”。

添加安全缓存?

问题是:每次用户访问网站时,他们的浏览器都需要下载所有(电子邮件)信息,其中大部分信息每次都是相同的。 如果不是每次都要求服务器提供所有信息,它可能会将数据缓存在浏览器中并检查缓存,这不是很好。 请记住,这不是“离线”访问:浏览器仍然安全地与服务器通信,但它可能使用存储在浏览器端缓存中的数据,而不是从服务器中检索所有数据。

这是提案:

  • 当浏览器检索数据时,它还会检索一个长的,随机的,服务器生成的密钥。 该密钥安全地存储在服务器上。
  • 在浏览器中,此密钥位于javascript内存中的敏感数据旁边。
  • 浏览器使用服务器给出的密钥和接受的加密算法(例如SHA256),加密它在内存中的数据,并将其放在本地存储中。
  • 当用户关闭浏览器,或导航离开网站或“注销”时,浏览器不再显示敏感信息,并且密钥也会随之丢失。
  • 这意味着一旦页面消失(或者很快就会消失),浏览器或任何具有任何访问级别的人解密高速缓存内容的能力就会消失。 为了做到这一点,他们需要密钥:如果他们有密钥,他们就已经可以访问数据本身(在浏览器/ javascript内存中)。

  • 当用户稍后返回站点时,他们需要再次与服务器进行身份验证,以便通过Web服务检索数据。

  • 同时,javascript从服务器检索(相同)密钥,它现在可以用来访问本地存储中的缓存。
  • 据推测,可能存在服务器随时间引入新密钥的过程,以避免无限期地使用相同的密钥。

有什么想法吗?

为了它的价值,请记住我读过:

(所以我至少知道javascript +本地存储+安全性的问题)

安全和加密是一个环境,在这个环境中,细节确实很重要,并且要注意你一直非常模糊。 实施很容易出错。 如果这是在商业应用程序和数据敏感足够考虑专业帮助。

但是,如果您要尝试,请确保使用安全加密密码来加密数据,否则您将打开特定于加密方法的攻击。 记住默认设置是为了简单而不是安全。 (例如,分组密码中的ECB模式)

我绝不会建议使用不同的加密密钥加密2个相同的文本。 考虑隔行扫描随机文本,使它们不相同

以下是一些像您这样的系统通常易受攻击的攻击:

  • 选择密文攻击
  • 已知明文攻击
  • 随机数发生器攻击
  • 密文与明文长度的相关性

您还需要确保此加密密钥不易受到XSS和其他标准Internet攻击的攻击。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM