javascript - 在客户端(Web)上存储敏感信息
问题描述
我开发了一个网站,我需要在客户端存储一个私钥。如何在客户端安全地存储这个变量?我可以使用sessionStorage吗?
(我希望这个(变量)信息只能由当前用户访问。一旦他关闭浏览器,数据就必须被删除。)
谢谢你。
解决方案
在最高级别,是的,sessionStorage
会做你需要的。引用MDN 的页面sessionStorage
:
- 只要浏览器打开,页面会话就会持续,并且在页面重新加载和恢复后仍然存在。
- 在新选项卡或窗口中打开页面会使用顶级浏览上下文的值创建一个新会话,这与会话 cookie 的工作方式不同。
- 打开具有相同 URL 的多个选项卡/窗口会为每个选项卡/窗口创建 sessionStorage。
- 关闭选项卡/窗口会结束会话并清除 sessionStorage 中的对象。
不过有几件事需要注意。首先,任何与服务器的连接都需要安全地完成。这需要 HTTPS 连接,此时可能使用 TLS 1.2 或 1.3。
其次,您需要确保页面环境是干净的。这意味着您无法加载可能泄露私钥的第 3 方 JavaScript。至少,您加载的任何第三方 JS 都需要先进行审核,然后添加一个integrity
属性以确保它不会更改。
最后,您可能希望在用户使用完页面后添加一些内容来销毁密钥。这可能是警告他们在使用完系统后关闭页面,或者更自动的方式,例如在x分钟后停用密钥并让系统及时协商新的密钥。显然,安全性和可用性之间存在平衡,但最好的系统可以以用户透明的方式做到这一点。
推荐阅读
- google-sheets - 在 Google 电子表格中结合 FILTER 和 ArrayFormula
- javascript - 单击按钮时显示表单
- php - 在json数组php中存储变量
- c++ - C ++ dll在计算机上启动但不在另一台计算机上
- javascript - .on 点击事件并不总是适用于动态添加的表格行
- javascript - Slick.js 在第一个和最后一个元素之间平滑过渡
- json - JSON 数组中没有数据 - BeautifulSoup 和 Python 3
- java - 尝试在 Flink 中创建 Kafka Consumer 时出现 java.lang.NoClassDefFoundError (CheckpointedRestoring)
- matlab - Matlab For Cycle,选择以递增数字命名的变量
- amazon-web-services - 如何使用元数据端点或 java sdk 获取我的 FARGATE ECS 任务的公共 IP?