Html 本地存储可以被认为是安全的吗?
我需要开发一个长期离线运行的web应用程序。为了实现这一点,我无法避免将敏感数据(个人数据,但不是您仅将散列存储的数据)保存在本地存储中 我承认这不是推荐的做法,但由于别无选择,我将采取以下措施来保护数据:Html 本地存储可以被认为是安全的吗?,html,security,local-storage,html5-appcache,Html,Security,Local Storage,Html5 Appcache,我需要开发一个长期离线运行的web应用程序。为了实现这一点,我无法避免将敏感数据(个人数据,但不是您仅将散列存储的数据)保存在本地存储中 我承认这不是推荐的做法,但由于别无选择,我将采取以下措施来保护数据: 使用stanford javascript加密库和AES-256将所有内容编入本地存储 用户密码是加密密钥,不存储在设备上 通过ssl从单个受信任服务器提供所有内容(联机时) 使用owasp antisamy项目验证服务器上进出本地存储的所有数据 在appcache的网络部分中,不使用*,
- 使用stanford javascript加密库和AES-256将所有内容编入本地存储
- 用户密码是加密密钥,不存储在设备上
- 通过ssl从单个受信任服务器提供所有内容(联机时)
- 使用owasp antisamy项目验证服务器上进出本地存储的所有数据
- 在appcache的网络部分中,不使用*,而是仅列出与受信任服务器连接所需的URI
- 通常,尝试应用OWASP XSS备忘单中建议的指导原则
- 上述方法的根本缺陷
- 有没有可能解决这些缺陷
- 当HTML5应用程序必须长期脱机运行时,有没有更好的方法来保护本地存储
谢谢你的帮助。好吧,这里的基本前提是:不,它还不安全 基本上,您不能在JavaScript中运行crypto: 问题是你不能可靠地将加密代码输入到浏览器中,即使你可以,JS也不能让你安全地运行它。因此,除非浏览器有一个加密容器(加密媒体扩展提供了这个容器,但为了DRM的目的正在与之对抗),否则就不可能安全地实现 至于“更好的方法”,目前还没有。您唯一的选择是以纯文本形式存储数据,并希望得到最好的结果。或者根本不存储信息。不管怎样 或者,如果您需要这种安全性,并且需要本地存储,请创建一个自定义应用程序…WebCrypto 下面详细介绍了客户端(浏览器)javascript中的加密问题。除了其中一个问题外,所有这些问题都不适用于现在的美国 对于离线应用程序,您仍然必须设计并实现安全密钥库 旁白:如果您使用的是Node.js,请使用内置API 本机Javascript加密(预WebCrypto) 我认为主要的问题是有人可以物理访问您的站点的
localStorage
,而您需要加密技术来帮助阻止这种访问
如果有人有身体接触,你也会受到比阅读更糟糕的攻击。这些包括(但不限于):键盘记录器、脱机脚本修改、本地脚本注入、浏览器缓存中毒和DNS重定向。只有当用户在机器被破坏后使用机器时,这些攻击才会起作用。然而,在这种情况下,物理访问意味着您有更大的问题
因此请记住,如果机器被盗,本地加密有价值的有限场景将是
有些库确实实现了所需的功能,例如。但也有一些固有的弱点(如@ircmaxell回答中的链接所述):
作为对本主题的探索,我有一个题为“使用Web加密API保护TodoMVC”的演示文稿(,) 它使用来存储通过密码保护应用程序并使用密码派生密钥进行加密而在localStorage中加密的todo列表。如果忘记或丢失密码,则无法恢复。(免责声明-它是POC,不用于生产。) 正如其他回答所述,这仍然容易受到安装在客户端计算机上的XSS或恶意软件的影响。但是,当数据存储在服务器上并且应用程序正在使用时,任何敏感数据也会存储在内存中。我建议离线支持可能是一个引人注目的用例 最后,加密localStorage可能只会保护数据免受attac攻击