http://www.7klian.com

Lendf.Me 被盗是 ERC777 之过吗?从协议、尺度与兼容性思考

简朴说,用户可以通过果真的接口来实现对数据库的进攻。譬喻我们在登录网站时,会输入用户名和暗码,处事器靠山会判定用户名暗码是否匹配,来抉择是否能让用户登录。

DeFi 平台需充实思量自己业务逻辑与接入代币之间的兼容性,才气制止因兼容性产生不须要的安详问题。

虽然,实际上的代码没有这么简朴。你假如看了这段话实验去进攻网站,是不会乐成的。

上述安详事件获得劈头办理,为受害者(好比橙皮书老哥在 DeFi 里亏光又回本的两天)感想兴奋。被进攻的细节也已经获得了披露,但毕竟是什么导致了裂痕,仍有差异的声音。

拜见

应该怎么做?

回溯兼容不代表安详,因为新的特性一定具有外部性,而这个外部性是让其它实体很难预期的,所谓「安详是动态的」。回到适才的例子,有两种做法。

这里隐含了一点是什么呢,假如你刊行了一个 token,说它是 ERC777 的 token,那么必需要实现此尺度界说的所有接口。同时,这个 token 必需回溯兼容 ERC20 尺度。这是什么意思呢?

协议:汉语中的「协议」一词具有多义性。我们这里指的协议,不是法令意义上的「合约 / 契约 (Contract)」,也不是「软件许可证 (License)」,而是通信中的「协议 (Protocol)」。在电信规模,协议是通信系统中的两个或多个实体互换信息的系统法则。

这和兼容性有什么干系呢?表明一下。

——dForce 通告

假设我们在输入时,用户名输入:user'-- (留意--后头有个空格,单引号闭合 user 左边的单引号),暗码随意输入,如:111,然后点击提交按钮。等价于 SQL 语句:

假设 一个网站遵循用户协议 U20,只答允用户名是字母,因此用户无法输入 ' 和-这两个标记。虽然不只前端输入框限制,后端也会查抄每个字符是否都切合条件。换句话说,在接口通报参数的时候,不答允这两个标记呈现,这个接口是切合 U20 的。这时,不会呈现示例中的 SQL 注入问题。(但不确定是否其它注入大概。)

关于兼容性的例子

SQL 注入

原文标题:《协议、尺度、兼容性?ERC777 激发的一些思考》

按照例子的巨大度,两种做法都是可行的。更重要的是,为了制止反复劳动,提高效率,淘汰安详问题呈现的大概,该当对共性问题举办尺度化实验。

再把话题扯远一点,列车的最高速度从 20km/h 提到 100km/h,铁轨仍然和列车兼容。但噪音是否会造成沿途住民的影响,道口是否需要提高安详品级呢?这显然是要从头审视的。

ERC777 是协议吗?

是的。

这是后端代码的问题吗?这是协议进级的问题吗?都不是。而是因为协议进级后,让用户发生了足以摧毁系统的超本领。

「SQL 注入是一种将 SQL 代码添加到输入参数中,通报随处事器理会并执行的一种进攻手法。」

「此次黑客进攻主要是操作 imBTC 资产 ERC777 尺度的裂痕举办了重入进攻。回调机制答允黑客重复将伪造的 imBTC 作为抵押物借出金钱。」

虽然我小我私家倾向于别的一种表达,ERC777 包括了协议。ERC777 界说了一种代币范例,划定了代币合约的属性、开放的接口及实现的成果,用于类型以太坊地点与 ERC777 代币合约间的通信,这是通过接口完成的。但 ERC777 也包括了通信协议外的对象,譬喻 decimals() 这个函数用来查询 token 的精度,这显然是通信协议,但凭据 ERC777 的要求必需返回 18,这就不属于通信协议的领域。

尺度不必然是协议,因为尺度不可是通信规模的。而协议也不必然是尺度,因为尺度必需获得类型简直认。但通信尺度必然是通信协议。因此,尺度必需由一些指定的组织颁布。较量知名的尺度组织有 ISO、ITU、IETF 等。譬喻 TCP 作为一种传输尺度,就是 IETF 揭晓的 RFC-793 所抉择的。

ERC777 是尺度吗?

是的。从名字就能看出来。

尺度:尺度是「为了在必然的范畴内得到最佳秩序,经协商一致拟定并由公认机构核准,配合利用的和反复利用的一种类型性文件。」

EIP 777: ERC777 Token Standard (ERC 代币尺度)。

一是提前对各类外部性举办判定。后端代码很是审慎,冒充不知道用户的输入是受限的,凭据全字符集来举办处理惩罚,这样无论协议怎么进级,,后端都是安详的。

按照尺度文档,ERC777 对 ERC20 是 backward compabitlity,这是什么意思呢?

譬喻,用户登录是个逻辑简朴,且很是普遍的场景。为了防备 SQL 注入,就有譬喻 Prepared Statement 之类的尺度化做法,完全不需要闭门造车。而回到开头的谁人问题,我更想引用 慢雾 的一段话「第三方 DeFi 平台在接入的时候,应需要充实思量平台自己的业务逻辑与接入代币之间的兼容性,才气制止因兼容性产生不须要的安详问题。而不是简朴的将问题归罪于协议和代币提供方。

SELECT * FROM user WHERE username = 'user'-- 'AND password = '111'

由于「--」之后的部门被注释掉了,无论暗码是正确可能是错误的,用户都可以乐成登录。

至少,我们也应该小心所有和我们打交道的人,每个合约都要小心所有与其打交道的合约,来制止呈现不须要的安详问题。因为「不绝地他添来别的的你我 / 使我们富厚并且危险。」(穆旦,《诗八首》,1942 年。)

向后兼容(backward compatibility),又称向下兼容(downward compatibility),回溯兼容,在计较机中指在一个措施、库或硬件更新到较新版本后,用旧版本措施建设的文档或系统仍能被正常操纵或利用(包罗输入数据)、在旧版本库的基本上开拓的措施仍能正常编译运行,或较旧版的硬件仍可在新版利用的环境。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!