为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以将本地存储视为安全的?

/ 猿问

是否可以将本地存储视为安全的?

泛舟湖上清波郎朗 2019-11-25 11:19:30

我需要开发一个可长期离线运行的Web应用程序。为了使它可行,我无法避免将敏感数据(个人数据,而不是您将仅存储散列数据的类型)保存在本地存储中。

我接受不推荐这样做,但是我几乎没有选择要执行以下操作来保护数据:

  • 使用斯坦福javascript密码库和AES-256将所有内容都加密到本地存储中

  • 用户密码是加密密钥,未存储在设备上

  • 通过ssl从单个受信任的服务器提供所有内容(在线时)

  • 使用owasp antisamy项目验证往返服务器本地存储的所有数据

  • 在appcache的网络部分中,不使用*,而是仅列出与受信任服务器连接所需的URI

  • 通常,尝试应用OWASP XSS备忘单中建议的指南

我很欣赏魔鬼在细节上的细节,并且知道人们对本地存储和基于JavaScript的安全性普遍持怀疑态度。任何人都可以评论是否存在:

  • 上述方法的根本缺陷?

  • 有什么办法可以解决此类缺陷?

  • html 5应用程序必须长时间离线运行时,还有什么更好的方法来保护本地存储?

谢谢你的帮助。


查看完整描述

3 回答

?
元芳怎么了

Web加密

客户端(浏览器)javascript中的加密问题将在下面详细介绍。除了所有这些关注点之外,所有关注点均不适用于WebCrypto API,该API现在已得到很好的支持。


对于脱机应用程序,您仍然必须设计和实现安全的密钥库。


另外:如果您使用的是Node.js,请使用内置的加密 API。


本机Java密码术(WebCrypto之前的版本)

我认为主要的关注点是对计算机具有物理访问权限的人正在读取localStorage您网站的,而您希望通过加密来防止这种访问。


如果某人具有物理访问权限,那么您也很容易遭受其他攻击,这比读书更糟。这些包括(但不限于):键盘记录器,脱机脚本修改,本地脚本注入,浏览器缓存中毒和DNS重定向。仅当用户在计算机受到威胁后使用计算机时,这些攻击才起作用。但是,在这种情况下进行物理访问意味着您会遇到更大的问题。


因此请记住,如果机器被盗,则本地加密很有价值的局限性场景是。


有些库确实实现了所需的功能,例如Stanford Javascript Crypto Library。但是,存在一些固有的弱点(如@ircmaxell的答案的链接所述):


缺乏熵/随机数生成;

缺少安全的密钥库,即如果私钥存储在本地或存储在服务器上(禁止离线访问),则必须用密码保护它;

缺乏安全擦除;

缺乏时序特征。

这些弱点中的每一个都对应于一种密码泄露的类别。换句话说,尽管您可能拥有“ crypto”的名字,但它远低于人们在实践中所追求的严格性。


话虽这么说,精算评估并不像“ Javascript加密功能弱,不要使用它”那么简单。这不是背书,严格地是警告,它要求您完全了解上述弱点的暴露,所面临媒介的频率和成本以及在发生故障时的缓解或保险能力:Javascript crypto,in尽管它有弱点,但可能会减少您的接触风险,但只能针对技术能力有限的小偷。但是,您应该假定Java加密对于以该信息为目标的坚定而有能力的攻击者没有价值。当已知实现中固有的许多弱点时,有些人会认为将数据称为“加密”是一种误导。换一种说法,您可以略微减少您的技术风险,但可以通过披露增加财务风险。当然,每种情况都是不同的-减少将技术风险暴露于财务风险的分析并非易事。这是一个说明性的类比:尽管存在固有风险,但一些银行仍要求使用弱密码,因为它们所遭受的弱密码损失要小于支持强密码的最终用户成本。


如果您阅读了最后一段,并且认为“互联网上某个叫Brian的人说我可以使用Java加密技术”,请不要使用Java加密技术。


对于问题中描述的用例,用户加密本地分区或主目录并使用强密码似乎更有意义。这种类型的安全性通常经过良好测试,广泛信任并且通常可用。


查看完整回答
反对 回复 2019-11-25
?
皈依舞

作为对该主题的探索,我有一个名为“使用Web密码学API保护TodoMVC”的演示文稿(视频,代码)。


它使用Web加密API通过密码保护应用程序并使用密码派生密钥进行加密,从而将加密的待办事项列表存储在localStorage中。如果忘记或丢失密码,将无法恢复。(免责声明-这是一个POC,不用于生产用途。)


在其他答案中,这仍然容易受到客户端计算机上安装的XSS或恶意软件的影响。但是,当数据存储在服务器上并且正在使用该应用程序时,任何敏感数据也将位于内存中。我建议脱机支持可能是引人注目的用例。


最后,对localStorage进行加密可能只会保护数据,使其免受对系统或其备份具有只读访问权限的攻击者的攻击。它为OWASP十大A6敏感数据公开项目增加了少量的纵深防御,并允许您回答“这些数据是否长期以明文形式存储?” 正确地。


查看完整回答
反对 回复 2019-11-25

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信