【问题标题】:Store sensitive information on the client side (Web)在客户端(Web)上存储敏感信息
【发布时间】:2019-12-08 11:41:47
【问题描述】:

我开发了一个网站,我需要在客户端存储一个私钥。 如何在客户端安全地存储这个变量? 我可以使用 sessionStorage 吗?

(我希望只有当前用户可以访问此(变量)信息。一旦他关闭浏览器,就必须删除数据。)

谢谢。

【问题讨论】:

  • 在这种情况下定义“安全”。其他用户不应该看到这些信息吗? 当前用户是否应该看不到这些信息?
  • 我希望只有当前用户可以访问此(变量)信息。一旦他关闭浏览器,数据就必须被删除。谢谢。
  • 如果这是来自任何非对称密码学的private key,我永远不会将它暴露给前端。它永远不会改变,因此一旦被盗,用户帐户就会受到损害。非专业前端程序员可以通过多种方式无意中引入漏洞。
  • 好的,还有哪些其他选择?
  • 你用它做什么?要管理用户会话,例如用户登录到注销?如果用户关闭浏览器,那么用户是否需要在下次访问时再次登录? @Zondium 如果您对用例有所了解,很容易提出更多选择。

标签: javascript var


【解决方案1】:

在最高级别,是的,sessionStorage 将满足您的需求。引用MDN’s page on sessionStorage

  • 只要浏览器处于打开状态,页面会话就会持续存在,并且会在页面重新加载和恢复后继续存在。
  • 在新选项卡或窗口中打开页面会使用顶级浏览上下文的值创建一个新会话,这与会话 cookie 的工作方式不同。
  • 使用相同的 URL 打开多个选项卡/窗口会为每个选项卡/窗口创建 sessionStorage。
  • 关闭选项卡/窗口会结束会话并清除 sessionStorage 中的对象。

不过,有几件事需要注意。首先,与服务器的任何连接都需要安全地完成。这需要 HTTPS 连接,此时可能使用 TLS 1.2 或 1.3。

其次,您需要确保页面环境干净。这意味着您无法加载可能泄露私钥的 3rd 方 JavaScript。至少,您加载的任何第三方 JS 都需要先进行审核,然后添加 integrity attribute 以确保它不会更改。

最后,您可能希望在用户使用完页面后添加一些内容来销毁密钥。这可能是警告他们在使用完系统后关闭页面,或者更自动的操作,例如在 x 分钟后停用密钥并让系统及时协商新的密钥。显然,安全性和可用性之间存在平衡,但最好的系统可以以用户透明的方式做到这一点。

【讨论】:

    猜你喜欢
    • 2018-11-28
    • 2012-12-26
    • 2015-05-03
    • 2022-01-17
    • 1970-01-01
    • 2020-07-09
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多