gun.user.recall() 将密码以明文形式存储在 sessionStorage 中而不加密

gun.user.recall() stores password as plain text in sessionStorage without encryption

我想在我的项目中应用gun.user

当我使用 user.recall(opt)

将用户存储在 sessionStorage 中时

This code in sea.js 将密码存储在 tmp 中而不加密。

还好吗?或者..

我应该在调用 .auth 之前加密密码吗?

这是我的代码。

jq('#up').on('click', (e) => {
    let form = check();
    if(!form){ return }
    S.user.create(form.alias, form.pass, (ack) => {
        if(ack.err){ return S.tell(ack.err) }
        check.up = true;
        S.user.auth(form.alias, form.pass, logined);
    });
});

jq('#in').on('click', (e) => {
    let form = check();
    if(!form){ return }
    S.user.auth(form.alias, form.pass, logined);
});

let logined = (ack) =>{
    if(ack.err){ return S.tell(ack.err) }
    S.user.recall({sessionStorage: true});
}

+

我找到了关于 user.create()document

Passphrase that will be extended with PBKDF2 to make it a secure way to login.

但是,我的会话存储中有平面文本。

枪支版本为0.2019.515.

@huhsame,非常关心! (顺便说一句,令人难以置信的 GUN AR/VR 在你的 Twitter 上进行了演示!)

Browsers require domain-based security which sadly limits P2P security.

不幸的是,sessionStorage 是最安全的 浏览器 选项:

  • 凭证不与服务器共享(就像 cookie 一样)。
  • 它使用户在刷新时保持登录状态。
  • 如果您关闭选项卡,它会删除凭据

在页面加载之间,加密密码 是个好主意,但问题是 ,要使用户保持登录状态,还必须存储解密密钥。 :(

localStorage 中存储凭据 不安全,这就是 sessionStorage 更好的原因。

Warning! Unless you use a Browser Extension (below) or Browsers adopt better solutions, an XSS leak can compromise credentials from sessionStorage - but even if you disable it, credentials can be pulled from in-memory without an Extension to protect accounts.

PBKDF2 在登录过程中使用,而不是会话管理 - 同样,它也可以在那里使用,但具有与上述相同的限制。

Even sessionStorage does not work well for keeping users logged in.

因此,您应该考虑其他解决方案。我在这里写了更多关于其他选项的文章:

Keeping a Gun DB user authenticated during a session

更好的安全性

为了最好的安全性,用户可能需要安装一个浏览器扩展,比如我们的 http://party.lol 工具,直到浏览器本身采用这种类型的安全性,或者提供更好的 user-centric 会话管理。