【发布时间】:2014-06-08 23:59:52
【问题描述】:
我正在寻求有关如何最好地控制对主要离线使用的 HTML5 应用程序的访问的建议/批评。
应用程序结合使用 IndexedDB、本地和会话存储来存储数据,以便可以离线使用。数据/页面通过 HTTPS 提供。
目的是最大程度地降低平板电脑/PC 丢失/被盗时查看数据的风险。
目前,该应用程序使用 Stanford Javascript Crypto 库对用户/密码进行加密,然后如果用户能够成功通过服务器验证,则将其保存到本地存储中。如果应用程序随后脱机,则用户必须针对本地存储中的加密用户/密码进行“本地”身份验证。
此外,如果用户能够成功通过服务器身份验证,则未加密的用户/密码将存储在会话存储中。这样做是为了让应用程序可以定期尝试重新建立与服务器的联系并“看似”地重新进行身份验证,而无需用户重新输入他们的凭据。
我知道一些关于客户端加密错误的帖子/讨论请参阅 http://www.matasano.com/articles/javascript-cryptography/ 和 http://rdist.root.org/2010/11/29/final-post-on-javascript-crypto/ 和 .nczonline.net/blog/2010/04/13/towards-more-secure-client-侧面数据存储/ +其他。但是我不确定这些论点在这种情况下如何应用。
鉴于需要离线存储数据,我正在寻找对这种方法的批评。如果有更好的方法,请详细说明。
谢谢
【问题讨论】:
-
用户名+密码是否作为本地数据的加密密钥?如果不是,我会说这是最安全的做事方式(确保凭据没有保存在任何地方),因为没有密钥就很难解密其他数据,即使攻击者可以访问JavaScript。
-
@SilverlightFox,感谢您的快速回复。抱歉,我确实忘记说应用程序确实使用密码作为加密密钥。但是,为了避免在每次更改密码时重新加密数据,我正在考虑使用服务器生成的不变的第二个密钥来加密数据。第二个密钥又可以由“密码密钥”加密,并在用户会话期间不加密。
标签: javascript html security authentication encryption