Lendf.Me失窃属于ERC777 之过吗?从协议、标准以及兼容性考虑

属于的。

依照例子的复杂度,两种制作方法都属于可行的。更要紧的属于,为了规避重复劳动,提升效率,减少安全毛病涌现出的说不定,应当对共性毛病进行标准化尝试。

至少,小编也应该小心一切和小编交际的人,每一个合约都应该小心一切以及其交际的合约,来规避涌现出非必须的安全毛病。由于「不断地他添来另外的您我个人 / 使小编丰富而且危险。」(穆旦,《诗八首》,1942 年。)

因为「--」之后的部分被注释掉了,无论密码属于正确或者属于错误的,使用者都能够成功登录。

关于兼容性的例子

小编在登录个人网站时,会输入使用者名和密码,服务器后台会推断使用者名密码是不是匹配,来决定是不是能让使用者登录。

为何 ERC777 兼容了 ERC20,且供应了比 ERC20 更强大的功能,仍然不得得到广泛的应用呢?除去 ERC20 代币已经广泛选用,人们宁肯忍受它的缺点,选用 approve and transferFrom 这种并不那样安全的手段,也不肯或没办法升级外,还到底有一个要紧的因素属于:光兼容 ERC20 属于不够的,还要求兼容现有些其它协议。要是每一个协议都应该单独评估应用 ERC777 的危害,费用太高,且简单导致误解,这显然不利于它的宣传推广。

SQL 注入

啥是兼容性?

某天,个人网站的使用者协议进行了升级,变成了 U777,新的使用者能够选用 ' 和- 作为使用者名了,接口也要求进行升级。U777 对 U20 当然属于回溯兼容的,由于旧的使用者仍然能够选用使用者名登录,也能够选用旧的界面和接口登录。而新的使用者则要求前端和后端代码升级后才能登录。

例如,使用者登录属于个逻辑容易,且极为普遍的场景。为了预防 SQL 注入,就到底有例如 Prepared Statement 之类的规范化制作方法,完全不用闭门造车。而回到开头的那个毛病,我个人更愿意引用慢雾的一段话「再次方 Decentralised Finance 论坛在接入的时候,应要求充分思考论坛本身的生意逻辑以及接入代币之间的兼容性,才能规避因兼容性发生非必须的安全毛病。而既不是容易的将毛病归咎于协议和代币供应方。」

应该怎么做?

标准可能不是协议,由于标准不仅仅属于通信范围的。而协议也可能不是标准,由于标准必须得到制度的确认。但是通信标准肯定属于通信协议。因此,标准必须由一些指定的组织出台。比较知名的规范组织到底有 ISO、ITU、IETF 等。例如 TCP 作为一种传输标准,就在于 IETF 颁发的 RFC-793 所决定的。

ERC777 属于标准不准?

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

这里隐含了一点属于哪个呢,要是您发行了一个 token,说它属于 ERC777 的 token,那样一定要达成此标准概念的一切接口。同时,这个 token 必须回溯兼容 ERC20 标准。这的意思是呢?

协议:汉语中的「协议」一词具备有多义性。小编这里指的协议,既不是法律意义上的「合约 / 契约 (Contract)」,更不是「软件许可证 (License)」,而属于通信中的「协议 (Protocol)」。在电信范围,协议属于通信系统软件中的俩或多个实体交换信息的系统软件规则。

小编能否把公共的常用功能抽象出来,形成标准的达成?例如「存款」这个操作,要是它到底有针对不一致代币标准的规范参考达成,那样许多毛病涌现出的概率就会降到非常的低。

回溯兼容不代表安全,由于新的特质势必具备有外部性,而这个外部性属于让其它实体非常的难预期的,所谓「安全属于动态的」。回到刚刚的例子,到底有两种制作方法。

二属于灵活但是审慎的战略。在协议升级时前,重新评估安全性,并做良好修改和检测工作后重新部署。

假设小编在输入时,使用者名输入:user'-- (留意--后面到底有个空格,单引号闭合 user 左侧的单引号),密码随意输入,如:111,然后点击提交按钮。等价于 SQL 语句:

ERC777 属于协议吗?

再把话题扯远一点,列车的最高速度从 20km/h 提到 100km/h,铁轨仍然和列车兼容。但是噪音会不会导致沿途居民的影响,道口是不是要求提升安全等级呢?这显然属于要重新审视的。

依照标准文档,ERC777 对 ERC20 属于 backward compabitlity,这的意思是呢?

——dForce 通知

当然我个人个人倾向于另外一种表达,ERC777 包含了协议。ERC777 概念了一种代币种类,规定了代币合约的属性、开放的接口及达成的功能,用于制度Ethereum地址以及 ERC777 代币合约间的通信,这属于通过接口完成的。但是 ERC777 也包含了通信协议外的东西,例如 decimals() 这个函数用来查看 token 的精度,这显然属于通信协议,但是按照 ERC777 的需要必须返回 18,这就不是通信协议的范畴。

兼容性属于指硬件之间、软件之间或属于软硬件组合系统软件之间的相互协调工作的程度。

一属于提前对各种外部性进行推断。后端代码非常小心谨慎,假装不明白使用者的输入属于受限的,按照全字符集来进行处置,如此无论协议怎么升级,后端都属于安全的。

当然,事实上的代码不存在这么容易。你若是看了这段话尝试去攻击个人网站,属于不懂得成功的。

「SQL 注入属于一种将 SQL 代码添加到输入参数中,传递到服务器分析并实行的一种攻击手法。」

「此次黑客攻击主如果借助 imBTC 资产 ERC777 标准的漏洞进行了重入攻击。回调机制允许黑客反复将伪造的 imBTC 作为抵押物借出款项。」

EIP 777: ERC777 Token Standard (ERC 代币标准)。

非常的显然,既不是的。协议只不过是保证切合制度地将使用者的输入传递给后端,协议升级后,这仍然正确地完成了。而新的字符带来的危害,属于要求后端代码重新评估的,也能够觉得后端代码以及新的协议不兼容。

上述安全事件得到初步化解,为受害者(比方说橙皮书老哥在 Decentralised Finance 里亏光又回本的两天)感到开心。被攻击的细则也已经得到了披露,但是到底属于哪个造成了漏洞,仍到底有不一样的声音。

标准:标准属于「为了在肯定的领域内获取最理想秩序,经协商一致拟定并由公认机构批准,一同选用的和重复选用的一种制度性文件。」

哪个意思,要是小编把 ERC20 看作旧版本,把 ERC777 看成新版本。回溯兼容指的就在于,ERC20 的任何接口,在 ERC777 中都得到了达成。换句话说,假设一个 token 直接从 ERC20 升级到了 ERC777 (事实上不说不定,但是小编能够做如此的假设),原先通信方式仍然到底有效,但是这不代表最后的结果属于一致的。这点尤为重要!第一来看一个例子。

要是前端和后端只不过是容易地对上述俩字符不加限制,必然会造成上述 SQL 注入毛病。但是这个要怪罪接口升级吗?

容易说,使用者能够通过公开的接口来达成对数据库的攻击。例如:

有些觉得属于 ERC777 的不足;有些觉得属于兼容性的毛病;有些觉得 imBTC 达成的毛病。在此,我个人认为有的定义必须清晰,才能简便小编对事实的探讨。

.details .details-cont p, p {word-break: normal; text-align: unset} p img {text-align: center !important;}

协议

假设 一个个人网站遵循使用者协议 U20,只允许使用者名属于字母,因此使用者没办法输入 ' 和-这俩符号。当然不但前端输入框限制,后端也可能检查每一个字符是不是都切合条件。换句话说,在接口传递参数的时候,不允许这俩符号涌现出,这个接口属于切合 U20 的。这时,不懂得涌现出示例中的 SQL 注入毛病。(但是不确定是不是其它注入说不定。)

这和兼容性有哪些关系呢?讲解一下。

这属于后端代码的毛病吗?这属于协议升级的毛病吗?都既不是。而属于由于协议升级后,让使用者产生了足以摧毁系统软件的超能力。

属于的。从名称就能看出来。

为何 ERC777 难以得到宣传推广

向后兼容(backward compatibility),又称向下兼容(downward compatibility),回溯兼容,在计算机中指在一个程序、库或硬件更新到较新版本后,用旧版本程序创建的文档或系统软件仍能被正常操作或选用(包括输入数据)、在旧版本库的基础上开发的程序仍能正常编译运行,或较旧版的硬件仍可在新版选用的情况。

参见:https://blog.csdn.net/github_36032947/article/details/78442189

相关推荐

最新资讯

热门资讯