新闻开发人员企业区块链解释事件和会议新闻时事通讯
订阅我们的新闻.
电子邮件地址
我们尊重您的隐私
主页博客区块链开发
智能合约安全心态
每个以太坊开发人员都需要了解的5条安全原则,以及基本的权衡取舍。由ConsenSys 2020年6月17日发布于2020年6月17日
由我们的区块链安全专家团队ConsenSys Diligence提供.
尽管该行业日趋成熟,但智能合约的开发仍是一个相对较新且日趋成熟的领域。因此,随着发现新的错误和安全风险以及开发新的最佳实践,您应该期望安全领域中的不断变化。学习和跟随 最佳实践 只是作为智能合约开发人员需要做的安全工作的开始.
智能合约编程需要的工程思维方式与您惯常的思维方式不同。失败的代价可能很高,并且改变可能很困难,这使其在某种程度上与Web或移动开发相比,更类似于硬件编程或金融服务编程。因此,仅靠防御已知的漏洞是不够的。相反,您将需要学习新的发展哲学.
为失败做准备
任何非平凡的合同都会有错误。因此,您的代码必须能够优雅地响应错误和漏洞.
- 出问题时暂停合同(“断路器”).
- 管理有风险的金额(速率限制,最大使用量).
- 拥有有效的升级途径来修复和改进错误.
仔细推出
最好在正式发布产品之前先发现错误。.
- 彻底测试合同,并在发现新的攻击媒介时添加测试.
- 提供 错误赏金 从alpha testnet版本开始.
- 分阶段推出,每个阶段的使用和测试都在增加.
保持合同简单
复杂性增加了出错的可能性.
- 确保合同逻辑简单.
- 模块化代码以缩小合同和职能.
- 尽可能使用已经编写的工具或代码(例如,不要滚动自己的随机数生成器).
- 在可能的情况下更希望表现更清晰.
- 仅将区块链用于系统中需要分散的部分.
保持最新
跟踪新的安全性发展.
- 一旦发现新错误,请检查您的合同.
- 尽快升级到任何工具或库的最新版本.
- 采用看似有用的新安全技术.
注意EVM的特质
虽然您的大部分编程经验都与以太坊编程相关,但仍有一些陷阱需要注意.
- 对于外部合同调用要格外小心,这可能会执行恶意代码并更改控制流程.
- 了解您的公共功能是公共的,并且可能会被恶意地以任何顺序调用。任何人都可以查看智能合约中的私人数据.
- 牢记天然气成本和大块天然气限制.
- 请注意,时间戳在区块链上是不精确的:矿工可以在几秒钟的间隔内影响交易的执行时间.
- 随机性在区块链上并非无关紧要,大多数随机数生成方法在区块链上都是可玩的.
基本权衡
在评估智能合约系统的结构和安全性时,需要考虑多个基本权衡。任何智能合约系统的一般建议是为这些基本权衡找到适当的平衡.
从软件工程角度出发,理想的智能合约系统是模块化的,可以重用代码而不是重复代码,并支持可升级组件。来自安全架构偏见的理想智能合约系统可能会共享这种思想,尤其是在更复杂的智能合约系统的情况下.
但是,在一些重要的例外情况下,安全性和软件工程最佳实践可能会不一致。在每种情况下,都可以通过确定沿合同系统维度的最佳属性组合来获得适当的平衡,例如:
- 刚性与可升级
- 整体式与模块化
- 复制与重用
刚性与可升级
虽然包括该资源在内的多种资源都强调可延展性特征,例如可杀死,可升级或可修改的模式,但可延展性与安全性之间存在根本的权衡.
根据定义,可延展性模式会增加复杂性和潜在的攻击面。在智能合约系统在预定义的有限时间段内执行非常有限的功能集的情况下,例如在无治理的有限时间范围内的代币销售合约系统中,简单性对于复杂性特别有效。.
整体式与模块化
完整的独立合同使所有知识在本地都是可识别和可读的。尽管很少有人高度关注以整体形式存在的智能合约系统,但仍存在关于数据和流的极端局部性的争论,例如,在优化代码审查效率的情况下.
与此处考虑的其他权衡取舍一样,安全最佳实践趋向于从简单的短期合同中脱离软件工程最佳实践,而在更复杂的永久合同系统中趋向于软件工程最佳实践。.
复制与重用
从软件工程的角度来看,智能合约系统希望在合理的情况下最大限度地提高重用性。在Solidity中有许多重用合同代码的方法。使用您拥有的,经过验证的先前部署的合同通常是实现代码重用的最安全方法.
如果没有自有的先前部署的合同,通常会依赖复制。诸如 OpenZeppelin的Solidity库 力图提供模式,以使安全代码可以重复使用而不会重复。任何合同安全分析必须包括任何先前未建立过与目标智能合同系统中的风险资金相对应的信任级别的重用代码。.
在以太坊上构建和启动应用程序可以说是当今软件工程师最激动人心的领域,但它需要持续的威胁建模,安全审核和事件响应计划.
勤奋团队在这里可帮助您保持警惕并建立对部署的信心.
预订区块链安全抽查
我们为期1天的评论可帮助您从一开始就将安全性构建到区块链代码中,以便从长远来看可以节省时间和金钱。立即预订您的SecuritySmart合约新闻快讯订阅我们的新闻快讯,以获取最新的以太坊新闻,企业解决方案,开发人员资源等信息。网络研讨会
如何构建成功的区块链产品
网络研讨会
如何设置和运行以太坊节点
网络研讨会
如何构建自己的以太坊API
网络研讨会
如何创建社交令牌
网络研讨会
在智能合约开发中使用安全工具
网络研讨会