【问题标题】:HTML5 Client Side Data Encryption - What are my options?HTML5 客户端数据加密 - 我有哪些选择?
【发布时间】:2011-08-23 23:30:42
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

  • 防范什么?客户端攻击?中途攻击?答案会因此而大不相同。
  • @Piskovar- 客户安全团队的一名成员提出了一个特别的担忧,即“会话存储信息有可能存储在磁盘上(例如,在浏览器崩溃时)。对于因此,任何敏感信息都不应未加密地存储在会话存储中。由于实现了会话超时,因此可以存储用户 ID 和会话令牌,但不建议存储密码/PIN。"
  • 啊哈,谢谢你的澄清。

标签: javascript web-applications html encryption


【解决方案1】:

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

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

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

当然,我是在不了解完整背景的情况下这么说的……我猜有充分的理由需要存储用户名/密码。

【讨论】:

  • 每次页面加载都需要用户名/密码的原因是我们必须使用它在每次页面加载时从远程 Web 服务加载数据。我们的客户不愿意在这个要求上让步:(
  • @TGuimond 一个棘手的问题,网络服务是否有其他可用的身份验证方法?您能否改为使用 Windows 身份验证进行身份验证?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    他是 pushing Mozilla 以进一步改进它以最终包含在 Firefox 中;我们会看看会发生什么。

    【讨论】:

    • @David Dahl:我完全忘了提到它是一个用于移动浏览器的网络应用程序,所以我们仅限于智能手机浏览器。道歉。
    【解决方案4】:

    看到这个HTML5 Web DB Security

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

    ...但是已经是一年前了,所以这可能已经是假的了

    【讨论】:

      【解决方案5】:

      最近自己在研究这个话题。我认为现在我们确实有一些经过验证的 JS 加密库,请参阅 herehere

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

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

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

      你怎么看?


      【讨论】:

        【解决方案6】:
        【解决方案7】:

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

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

        【讨论】:

          【解决方案8】:

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

          【讨论】:

            【解决方案9】:

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

            【讨论】:

              猜你喜欢
              • 2018-11-23
              • 1970-01-01
              • 1970-01-01
              • 2021-03-13
              • 2010-10-26
              • 2016-10-08
              • 1970-01-01
              • 1970-01-01
              • 2011-09-22
              相关资源
              最近更新 更多