0

我正在与 SEA 一起使用(嗯……实际上是在实验)。与身份验证相关的所有内容都运行良好...但是...

如果我没有登录,我不能再在 Gun 中放任何东西。

user.get('mydata').get('level1').get('level2').put('yup')作品

user.leave()

gun.get('mydata').get('level1').get('level2').put('yup')

返回“NO!Soul 未在 'level1' 签名。”

这是故意的吗?因为如果我想将数据放入非用户绑定的枪中怎么办?

4

1 回答 1

0

@stef-de-vries 好问题!

是的,SEA “防火墙”了所有数据,并要求它来自可验证的来源(用户)。

默认情况下(尽管您可以更改它,见下文),它不允许任何“公共”数据。这是因为如果它确实允许,则可能允许恶意对等方发送垃圾邮件、DDoS 或利用数据。

如果启用 SEA 并希望明确允许公共数据,则需要使用安全挂钩:

var gun = Gun();

gun.on('secure', function(msg){
    var yes;
    /* enforce some rules about data */
    /* requires wire-spec understanding */
    if(yes){
        this.to.next(msg); // call next middleware
    }
    // NOT calling next middleware firewalls the data.
});

我们建议创建一个严格的架构,然后使用该架构对数据实施安全性。

注意:如果您想要来自电线规范消息图中的 SEA 数据的“纯文本”版本,您可以调用它不会尝试验证数据签名Gun.SEA.read(data, false, plaintext => console.log(plaintext))false方法,因为它会让您验证它是否安全通过其他方式。

此外,由于 SEA 处于 alpha 阶段,因此情况可能会发生变化,或者安全挂钩可能实施不正确。因此,如果它没有按预期工作,请抱怨,或者就任何更好的方法或想法来处理这个问题提供反馈。

例如,在未来,我认为有可能创建一个构建在安全钩子之上的框架,这将有一个基于开发者模式的面向开发者的超级简单的 API。基本上,开发人员只需用安全策略注释他们的模式,然后 this-future-framework 将在内部自动创建适当的安全挂钩,而无需您对其进行编码。

于 2018-03-28T21:36:12.013 回答