我正在开发编辑:移动网络应用,它会显示一些敏感信息,并需要登录,以便在HTML5会话中存储成员用户名和密码。用户名和密码当前存储在未加密状态,因为我们需要在每个页面加载时使用此用户名和密码来访问客户端远程Web服务。
编辑:经过安全审查后,我们的客户提出了以下问题:
“会话存储信息有可能存储在磁盘上(例如,在浏览器崩溃时)。因此,在会话存储中不应以未加密的方式存储敏感信息。自会话超时后,可以存储用户ID和会话令牌但是不建议存储密码/密码。“
加密和解密客户端存储的敏感数据的最佳/最安全方法是什么?
谢谢!
答案 0 :(得分:11)
您好,而不是存储用户名和密码,您是否可以不与远程服务器创建某种“会话”,而是传输身份验证令牌?
在客户端的任何地方存储用户名和密码都让我感到不寒而栗。
也许是在寻找安全存储用户名/密码的方法,寻找消除存储用户/密码的方法。
但是我当然是在不知道完整背景的情况下说这个......我猜我们有充分的理由需要存储用户名/密码。
答案 1 :(得分:8)
对于任何绊倒这个问题的人来说,斯坦福在http://crypto.stanford.edu/sjcl/有一个加密项目。我自己没有在生产中使用它,但我正在忙着调查它,到目前为止看起来很有希望。希望这有助于某人。
答案 2 :(得分:3)
Firefox工程师David Dahl拥有Firefox扩展原型domcrypt(repository on github),可以访问Firefox的NSS(网络安全服务)API。由于Chrome也使用NSS,因此提供相同的API也可能是直截了当的。
他pushing Mozilla进一步发展它以便最终包含在Firefox中;我们会看到会发生什么。
答案 3 :(得分:2)
答案 4 :(得分:2)
最近我自己正在研究这个话题。我想现在我们确实有一些经过验证的JS加密库,请参阅here和here。
现在问题是存储密钥的位置。将其存储在客户端将与存储没有加密的数据相同。让用户一直输入密钥会破坏目的。
也许您可以在创建新会话时要求服务器生成新密钥。 (确保在发出此请求时使用HTTPS)。如果会话到期,则用户必须再次输入用户名/密码,并使用新令牌对其进行加密。要解密密钥,您必须向服务器发出(安全)请求(传入会话ID)以请求密钥,然后可以使用该密钥解密用户名和密码。
现在这仍然会打开常见的漏洞,例如跨侧脚本或会话劫持,但至少用户密码不会以明文形式存储在客户端。
您怎么看?
答案 5 :(得分:2)
更新的浏览器版本应该支持Web Crypto API。
1. See the live test page if you browser works
2. The w3c Webcrypto API description
3. Mozilla Developer Network Info on WebCrypto API
答案 6 :(得分:0)
我处理面临同样问题的application。 安全性对于此应用程序很重要,因为它允许用户构建个人树(或嵌套列表)并将它们存储在云上。
我的解决方案是使用服务器为每个用户生成的另一个密码来加密存储在客户端的密码。
答案 7 :(得分:-1)
我必须说,如果您创建的会话数据1不是, - 存储在服务器而非客户端,因此没有人看到会话数据或至少它应该通过asp,或php等方式完成让应用程序需要互联网并从Web服务器检索信息,而不是将其存储在客户端。 2如果这确实涉及客户端处理流式传输视频或图像,或者您必须在客户端创建一些文件,将密钥存储在客户端移动设备上是唯一的方法。因此,要么具有用于解密数据的短ttl的密钥,通过某种形式的认证或证书给出的密钥,或者从主办公室安装的密钥,并且在它们松开时加密设备。我找不到并加密我想为你建议的功能。
答案 8 :(得分:-1)
存储敏感用户凭据确实不是一个好设计。而是使用sprint框架从服务器生成经过身份验证的令牌。然后,您可以使用Web DB安全模块将其存储在localstorage中。