http://www.7klian.com

这份智能合约「避坑指南」发起保藏

谜底必定是后端。这大概是个细节问题,但却十分要害。固然听起来有点谬妄,可是你大概也需要将前端开拓者看成是你的仇人,假设他们也会和黑客站在另一边。智慧的合约开拓者会在代码中写下所有逻辑,我们只相信我们的代码。
此刻,你是否对智能合约的安详性有了更深的相识?

在我们开始接头这个问题之前,我想请各人先看看 NEP5 智能合约中的转账成果:

编写一份智能合约就像编写 Web 应用措施一样,你要区分前端和后端。在上运行的智能合约是后端。除了合约之外,你还需要编写一个前端应用措施作为用户与你的智能合约举办交互的接口。
那么问题来了,你应该在前端照旧后端验证用户输入呢?譬喻,你正在编写一个体名处事将区块链地点与人类可读的字符串通接起来。然而,假如你想节制文本的长度,那你应该在那边写下名目验证逻辑呢?前端照旧后端?

虽然,这不是本来的版本,我稍微修改了一下,使其容易受到某种范例的进攻。你能办理这个问题吗?

我还认为,作为常用的数据范例,在 Neo 智能合约中应该为地点设计特定的数据范例。
在编写代码的时候,你应该始终假设你的用户是潜在的黑客,会极力寻找你智能合约中的裂痕,并会绝不踌躇地加以操作。作为一名安详研究人员和措施开拓人员,我有许多被进攻的履历,我的履历教导是,无论裂痕看起来多微小,效果都大概是十分严重的。
查抄方针地点
作为一名机警的合约开拓者,你的代码是独一可以信任的对象。具有预防心是十分重要的。
在沟通的地点间运行 From 和 To,大概会触发这个 bug。利用被分派给 From 和 To 的沟通地点,第一个 PUT 语句将 newFromvalue 生存到该地点。尽量如此,第二个 PUT 语句仍将该值变动为 newToVal,该值甚至比前一个 Balance 更大。这样,你就可以凭空锻造新的通证。

接下来,我们将 “to” 参数作为 “totalSupply” 输入,这样一旦这个呼吁被乐成执行,我们就可以改变该通证的总供应量:

黑客无处不在

在这篇文章中,我将分享一些基于现有裂痕而总结的小贴士,但愿能让你的智能合约越发安详。固然这些贴士不能确保让你的智能合约对黑客完全免疫,但至少可以辅佐你制止一些最常见的错误。

因此,必然要查抄每个函数的输入名目。Neo 的生意业务今朝是免费的,,多添加几行查抄代码并不会有什么弊端。
Neo 智能合约中的一个大问题是它存储数据的方法。带有一对键值的 Storage.put() 被用来存储各类数据。外貌上看起来,这种方法既易用又酷炫,就像我们面临的是一本字典或一副舆图一样。但问题是,假如你在存储数据时没有正确地验证密钥名目,你就会有大贫苦了。譬喻,我们的 NEP5 智能合约中有一个 “totalSupply” 要害字,暗示该 NEP5 通证的最大值,而且在合约中有如下转账成果:

不要信任你的用户

今朝我们在 NEP5 模板中有一个长度查抄的逻辑。假设这个逻辑被有意可能无意者移除,用户就可以输入任何字串作为参数:

输入长度
用代码办理问题

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

相关文章阅读