我正在跟踪分布式/无服务器应用程序的 Gun/SEA 身份验证系统。当 Gun 用户通过身份验证时,此应用程序正在将会话信息保存到本地存储。我遇到的一个问题是,当刷新页面或打开新选项卡时,我希望在会话有效时保持用户身份验证,并且由于 XSS 和物理安全原因,我宁愿不将用户名和密码存储在本地存储中. 目前有解决这个问题的方法吗?我认为 sessionStorage 可能会更好,但它仍然存在一些相同的安全问题,例如将用户名和密码存储在攻击者可能获取的位置,并且在打开新选项卡时需要用户登录。
问问题
1115 次
1 回答
4
授予 !很高兴收到您的来信,对于延迟回复感到抱歉(我不确定评论的人是谁,因为它并没有真正帮助您的情况)。
这是一个很好的问题,而且您已经在某种程度上触及了安全性和浏览器技术的局限性——老实说,它们都不是很好。让我们来复习:
- 如果你添加
user.recall({sessionStorage: true})
它,它会尝试自动让你重新登录。但你是对的,有一些安全权衡,但我认为这是合理的。 localStorage
. 我听说一些人抱怨不同的浏览器处理 sessionStorage 很差(不保留在新标签等中),所以下一个选择是使用 localStorage。但是,我确实认为这是一个实际的安全问题。- 温泉。单页应用程序 - 如果您尝试分发独立打包的“dApps”,这已经很有用了。但你是对的,你仍然有刷新问题。以我自己的经验,(1) 运行良好,足以使这成为良好的用户体验。
- 别针。我们社区提出的另一个想法是使用 (1 ~ 3),但将其与设备 PIN 码结合使用。这意味着您可以在合理的安全假设下将其存储在 localStorage 中,并在刷新/恢复时用户输入他们的 PIN 以解密他们的会话。
IndexedDB
. 事实证明,WebCrypto API 确实有一个导入密钥的选项,并将在 IndexedDB 中对它们进行加密,并在以后检索它们而不会传递给用户空间——至少,这是我所听到的。但是,您仍然必须处理最初获取密钥的问题,并且 IndexedDB 支持各不相同,您需要为它编写一个 GUN 插件。- 浏览器扩展。我最不喜欢这个,因为它需要用户安装一些东西,但是由于浏览器没有提供一些与此安全等效的本机功能,我们必须进行干预。好消息是 GUN + MetaMask 集成正在发生,MetaMask 已经安装了 100 万次以上,因此您的用户可能已经拥有它。
- 浏览器 API。我们将与 MetaMask 团队和其他人合作,将本机 API 作为标准。我希望 Brave 将追随 MetaMask 的领先地位,FireFox 将追随 Brave,Chrome 最后。
同时,您最初的建议可能是最好的 - 使用 (1) sessionStorage。它将与 MetaMask 向前/向后兼容。中期希望您或社区中的其他人能够(5)工作。然后长期(6 和 7)将成为解决方案。
至于现在,请查看 MetaMask 演示:https ://twitter.com/marknadal/status/1062153254283276288
编辑:MetaMask 仍在为此开发他们的 API,与此同时,您可以使用我们的http://party.lol扩展。
于 2018-12-12T11:14:55.623 回答