我正在跟踪用于分布式/无服务器应用程序的Gun / SEA认证系统。当Gun用户通过身份验证后,此应用会将会话信息保存到本地存储中。我遇到的一个问题是刷新页面或打开新选项卡时,我想在会话有效时保持用户身份验证,由于XSS和物理安全原因,我宁愿不将用户名和密码存储在本地存储中。目前有解决此问题的方法吗?我认为sessionStorage可能会更好,但是它仍然存在一些相同的安全性问题,即将用户名和密码存储在攻击者可能能够获得的位置,以及在打开新选项卡时要求用户登录。
答案 0 :(得分:1)
赠予!很高兴收到您的来信,对您的回复延迟表示抱歉(我不确定该评论的人是谁,因为这并不能真正帮助您解决问题)。
这是一个很大的问题,您已经对安全性和浏览器技术的局限性有所怀疑-老实说,它们都不是很好。让我们回顾一下:
user.recall({sessionStorage: true})
,它将尝试自动重新登录。但是,您是对的,在安全性方面存在一些折衷,但是我认为这是合理的。localStorage
。我听说有人抱怨不同的浏览器对sessionStorage的处理不佳(不会保留在新标签页等),因此下一个选择是使用localStorage。但是,我确实认为这是一个实际的安全问题。IndexedDB
。事实证明,WebCrypto API确实具有导入密钥的选项,并将在IndexedDB中对其进行加密并在以后将其检索而不会传递给用户土地-至少,这就是我所听到的。但是,您仍然必须最初处理密钥,并且对IndexedDB的支持各不相同,并且您将为此编写一个GUN插件。同时,您的原始建议可能是最好的-使用(1)sessionStorage。它与MetaMask兼容/向前/向后兼容。期中希望您或社区中的其他人能够(5)工作。然后长期解决方案(6和7)将是解决方案。
就目前而言,请查看MetaMask演示:https://twitter.com/marknadal/status/1062153254283276288