【问题标题】:Orbit-db security, how to prevent illicit docstore updatesOrbit-db 安全性,如何防止非法 docstore 更新
【发布时间】:2021-11-09 23:30:05
【问题描述】:

我有一个特定的 orbit-db 用例,但我对某种安全含义有点模糊。

我正在开发一个用户通过 Tronweb 钱包帐户登录的网络应用程序。
人们可以发布问题,而其他人可以回答问题并获得报酬。
为此,我将受访者的公钥添加到问题中并将其保存到 Orbit db。

现在我的理解是,对任何 orbit-db 实例的默认访问权限都授予默认创建它的应用程序(身份),或者您可以添加自定义访问控制器。比方说,如果我想创建一个数据库来管理标签,我可以基于我自己的 tronlink 帐户创建一个身份,并需要登录才能创建这些标签。没有其他人能够访问该数据库。

现在我有点模糊的是什么时候会发生:

OP 创建问题,响应者注册答案。
当 OP 接受答案后,将执行通过 Tronlink 插件支付。
但是由于 OrbitDB 可以在没有服务器的情况下运行(即基于本地 IPFS 节点的 p2p),所以阻止任何人在客户端 Javascript 代码中设置断点、获取 db 实例的句柄并执行更新调用来更新被访者在该问题文档中的本地地址,之后会同步到其他节点吗?
我将受访者的公钥存储在orbitdb中,但交易仍然由OP通过Tronlink钱包插件确认。但是,您仍然不能假设所有用户每次都检查它。

由于不涉及服务器,我看不出如何防止不受欢迎的各方破坏数据库客户端。
你能开导吗?如果我的问题不清楚,请告诉我。

【问题讨论】:

    标签: orbitdb


    【解决方案1】:

    是什么阻止了任何人在客户端 Javascript 代码中设置断点,获取数据库实例的句柄,并执行更新调用以在该问题文档中本地更新受访者的地址

    什么都没有。

    之后会同步到其他节点吗?

    这就是 OrbitDB 安全的原因。每个同步到新节点的文档都需要通过该节点的验证器功能。 因此,诚实(具有正确 AccessController 的节点)节点将过滤掉恶意更改


    这是什么意思?一个节点可以“损坏”,但不能“损坏”网络中的其他节点。

    【讨论】:

    • 嗯,也许我错过了一些东西。但是,如果您获得了数据库的句柄,那么您首先就可以有效地获得由您的脚本创建的数据库实例。默认情况下只有一个身份,即在打开数据库时执行创建数据库的脚本。该网站的每个用户都会在浏览器中运行自己的 IPFS 节点(对吗?)。我的意思是,没有“真正的”验证用户正在更新他/她自己的帖子,他们可以通过断点以创建数据库的脚本的身份虚拟更新数据库中的任何帖子。如果您对此有不同看法,请告诉我。
    • 我的意思是你不能说允许 docstore 更新,同时又说不允许......访问控制器似乎只是允许身份管理数据库,就像原始脚本可以。您似乎无法真正实现任何类型的授权:只有您可以更新帖子,因为您是之前创建帖子的人。它可以与服务器一起使用,因为您不应该能够闯入它;但是在客户端上,这似乎完全有可能。但是请告诉我您是否认为这是错误的以及为什么。
    • 当然,任何人都可以在 Orbit 内部进行任何类型的不当行为。他们可以操纵其中的每一条数据,并在未经任何授权的情况下进行任何更改。但这种变化只会停留在他们的电脑上。它不会传播到网络的其余部分,因为没有其他 honest 节点会接受它。这就是你所缺少的。因此,虽然恶意客户端可以执行非法操作,但其他非恶意客户端不会看到这些操作。
    • 但我希望用户能够更新他们拥有的某些文档并将此更改传播到其他节点。只有属于他们的那些,不是另一个。据我所知,不可能安全地更新一个用户创建的文档,除非该用户可以更新 any 文档。
    • 我不清楚;目前我决定为我的应用程序使用标准 Java 后端并使用常规数据库。感觉风险不值得。我仍然会在客户端使用加密钱包进行交易。
    猜你喜欢
    • 2016-04-29
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 2015-01-16
    相关资源
    最近更新 更多