HTML5客户端数据加密 - 我有哪些选择

HTML5 Client Side Data Encryption - What are my options?

本文关键字:选择 客户端 数据 加密 HTML5      更新时间:2023-09-26

我正在开发一个编辑:移动网络应用程序,该应用程序显示一些敏感信息,并且需要登录,将成员用户名和密码存储在HTML5会话中。用户名和密码当前以未加密状态存储,因为我们需要在每次页面加载时使用此用户名和密码来访问客户端远程 Web 服务。

编辑:经过安全审查,我们的客户提出了以下问题:

"会话存储信息可能会存储在磁盘上(例如,在浏览器崩溃时)。因此,不应将任何敏感信息以未加密的方式存储在会话存储中。由于实现了会话超时,因此可以存储用户 ID 和会话令牌,但不建议存储密码/PIN。

加密和解密存储在客户端的敏感数据的最佳/最安全方法是什么?

谢谢!

嗨,

您不能与远程服务器创建某种"会话"并传输身份验证令牌,而不是存储用户名和密码吗?

在客户端的任何地方存储用户名和密码让我不寒而栗。

也许要寻找安全存储用户名/密码的方法,请寻找完全不需要存储它的方法。

然而,当然,我在不知道完整背景的情况下这么说......我猜有一个很好的理由需要存储用户名/密码。

对于任何偶然发现这个问题的人来说,斯坦福大学在 http://crypto.stanford.edu/sjcl/有一个加密项目。我自己没有在生产中使用过它,但正忙于调查它,到目前为止它看起来很有希望。希望这对某人有所帮助。

David Dahl,一位Firefox工程师,有一个原型Firefox扩展domcrypt(github上的存储库),它提供对Firefox的NSS(网络安全服务)API的Javascript访问。由于Chrome也使用NSS,因此提供相同的API可能也很简单。

他正在推动Mozilla进一步发展它,以便最终包含在Firefox中;我们将看到会发生什么。

查看此 HTML5 Web DB 安全性

客户端加密库 不够成熟或测试不够好

。但已经是一年前了,所以这可能已经是错误的了

我最近正在研究这个话题。我认为到目前为止,我们确实有一些经过验证的JS加密库在这里和这里看到。

现在的问题是将密钥存储在哪里。将其存储在客户端与存储完全不加密的数据相同。让用户一直输入密钥会破坏目的。

也许您可以在创建新会话时要求服务器生成新密钥。(请确保在发出此请求时使用 HTTPS)。如果会话过期,用户必须再次输入用户名/密码,并且将使用新令牌对其进行加密。要解密密钥,您必须向服务器发出(安全)请求(传入会话 ID)以请求密钥,然后可用于解密用户名和密码。

现在,这仍然保留了常见的漏洞,例如跨端脚本或会话劫持,但至少用户密码不会以明文形式存储在客户端。

你觉得怎么样?


更新的浏览器版本应支持 Web 加密 API。

1.如果您的浏览器工作,
请参阅实时测试页面 2. w3c 网络加密 API 说明
3. Mozilla 开发者网络信息 WebCrypto API

我正在开发一个面临相同问题的应用程序。安全性对于此应用程序很重要,因为它允许用户构建个人树(或嵌套列表)并将其存储在云中。

我的解决方案是使用服务器为每个用户生成的另一个密码加密存储在客户端的密码。

我不得不说,如果您创建会话数据 1 不是,- 存储在服务器上而不是客户端,因此没有人看到会话数据,或者至少应该通过 asp 或 php 等方式完成,因此应用程序需要互联网并从 Web 服务器检索信息,而不是将其存储在客户端。 2 如果这确实处理客户端,例如处理流式传输视频或图像,或者您必须在客户端创建一些文件,将密钥存储在客户端移动设备上是唯一的方法。 因此,要么拥有带有短 ttl 的密钥来解密数据,要么拥有通过某种形式的身份验证或证书提供的密钥,要么拥有从您的总部安装的密钥并加密设备以防丢失。我还没有找到并加密我想为您建议的功能。

存储敏感的用户凭据确实不是一个好的设计。而是使用冲刺框架从服务器生成经过身份验证的令牌。然后,您可以使用 Web DB 安全性模块将其存储在本地存储中。