use*_*706 147 security html5 owasp local-storage html5-appcache
我需要开发一个可以长时间离线运行的Web应用程序.为了使其可行,我无法避免在本地存储中保存敏感数据(个人数据,而不是您只存储散列的数据类型).
我接受这不是推荐的做法,但是我没有做多少选择来保护数据:
我很欣赏魔鬼经常处于细节之中,并且知道对于本地存储和基于javascript的安全性存在很多怀疑.任何人都可以评论是否有:
谢谢你的帮助.
Bri*_*unt 67
客户端(浏览器)javascript中的加密问题详述如下.除了其中一个问题之外的所有问题都不适用于WebCrypto API,现在可以得到相当好的支持.
对于脱机应用程序,您仍必须设计并实现安全密钥库.
旁白:如果您使用的是Node.js,请使用内置加密 API.
我认为主要关注的是localStorage对您的网站具有物理访问权限的人,您希望加密技术有助于防止访问.
如果某人有物理访问权限,您也可以接受其他攻击并且比阅读更糟糕.这些包括(但不限于):键盘记录程序,脱机脚本修改,本地脚本注入,浏览器缓存中毒和DNS重定向.这些攻击仅在用户使用机器受到攻击后才能使用.然而,在这种情况下的物理访问意味着你有更大的问题.
因此请记住,本地加密有价值的有限情况是机器被盗.
有些库可以实现所需的功能,例如Stanford Javascript Crypto Library.但是有一些固有的弱点(如@ ircmaxell的回答中提到的那样):
这些弱点中的每一个都与加密折衷的类别相对应.换句话说,虽然你可能通过名字"加密",但它将远远低于人们在实践中所追求的严谨性.
尽管如此,精算评估并不像"Javascript加密弱,不使用它"那样微不足道.这不是认可,严格意义上的警告,它要求您完全理解上述弱点的暴露程度,您所面临的载体的频率和成本,以及您在发生故障时的缓解或保险能力:Javascript加密,尽管存在缺陷,可能会减少您的曝光率,但仅限于技术能力有限的盗贼.但是,您应该假设Javascript加密对于定位该信息的坚定且有能力的攻击者没有任何价值.当已知许多弱点是实施所固有的时,有些人会认为将数据称为"加密"是误导性的.换句话说,您可以略微降低您的技术风险,但会增加您的披露财务风险.当然,每种情况都不同 - 而减少技术风险暴露的分析也是非常重要的.下面是一个说明性的类比:有些银行需要弱密码,尽管有固有的风险,因为它们因弱密码而遭受的损失低于支持强密码的最终用户成本.
如果您阅读最后一段并想到"互联网上的某个名叫Brian的人说我可以使用Javascript加密",请不要使用Javascript加密.
对于问题中描述的用例,用户加密本地分区或主目录并使用强密码似乎更有意义.这种类型的安全性通常经过充分测试,广泛信任并且通常可用.
irc*_*ell 56
那么,这里的基本前提是:不,它还不安全.
基本上,你不能在JavaScript中运行加密:JavaScript加密被认为是有害的.
问题是您无法可靠地将加密代码加载到浏览器中,即使可以,JS也不能让您安全地运行它.因此,在浏览器具有加密容器(加密媒体扩展提供,但为了其DRM目的而被反对)之前,将无法安全地执行此操作.
至于"更好的方式",现在没有一个.您唯一的选择是以纯文本格式存储数据,并希望获得最佳效果.或者根本不存储信息.无论哪种方式.
要么,或者如果您需要这种安全性,并且您需要本地存储,请创建自定义应用程序......
Kev*_*son 12
作为对该主题的探索,我有一个题为"使用Web Cryptography API保护TodoMVC"(视频,代码)的演示文稿.
它使用Web Cryptography API存储在localStorage中加密的待办事项列表,其密码保护应用程序并使用密码派生密钥进行加密.如果您忘记或丢失了密码,则无法恢复.(免责声明 - 它是POC而非用于生产用途.)
正如其他答案所述,这仍然容易受到客户端计算机上安装的XSS或恶意软件的影响.但是,当数据存储在服务器上并且应用程序正在使用时,任何敏感数据也将存在于内存中.我建议离线支持可能是引人注目的用例.
最后,加密localStorage可能只保护数据免受只读访问系统或其备份的攻击者的攻击.它为OWASP Top 10项目A6敏感数据曝光增加了少量防御,并允许您回答"这些数据是否长期以明文形式存储?" 正确.
| 归档时间: |
|
| 查看次数: |
88280 次 |
| 最近记录: |