{"repo":"slowmist/eos-smart-contract-security-best-practices","free":true,"listed":false,"github":"https://github.com/slowmist/eos-smart-contract-security-best-practices","clone":"git clone https://github.com/slowmist/eos-smart-contract-security-best-practices.git","description":"A guide to EOS smart contract security best practices","language":null,"stars":392,"topics":["smart-contracts","security","blockchain","eosio"],"license":"Apache-2.0","category":"blockchain-web3","readme_excerpt":"EOS 智能合约最佳安全开发指南 English Version: check here\\ 한국어 버전: 여기를 클릭 这篇文档旨在为 EOS 智能合约开发人员提供一些智能合约的 安全准则 及 已知漏洞分析 。我们邀请社区对该文档提出修改或完善建议，欢迎各种合并请求(Pull Request)。若有相关的文章或博客的发表，也请将其加入到参考文献中。 目录 安全准则 已知漏洞 数值溢出 漏洞示例 防御方法 真实案例 权限校验 漏洞示例 防御方法 真实案例 apply 校验 漏洞示例 防御方法 真实案例 transfer 假通知 漏洞示例 防御方法 真实案例 随机数实践 漏洞示例 防御方法 真实案例 回滚攻击 漏洞示例 防御方法 真实案例 重入攻击 漏洞示例 防御方法 参考文献 致谢 安全准则 EOS 处于早期阶段并且有很强的实验性质。因此，随着新的 bug 和安全漏洞被发现，新的功能不断被开发出来，其面临的安全威胁也是不断变化的。这篇文章对于开发人员编写安全的智能合约来说只是个开始。 开发智能合约需要一个全新的工程思维，它不同于我们以往项目的开发。因为它犯错的代价是巨大的，很难像中心化类型的软件那样，打上补丁就可以弥补损失。就像直接给硬件编程或金融服务类软件开发，相比于 Web 开发和移动开发都有更大的挑战。因此，仅仅防范已知的漏洞是不够的，还需要学习新的开发理念： - 对可能的错误有所准备 。任何有意义的智能合约或多或少都存在错误，因此你的代码必须能够正确的处理出现的 bug 和漏洞。需始终保证以下规则： - 当智能合约出现错误时，停止合约 - 管理账户的资金风险，如限制（转账）速率、最大（转账）额度 - 有效的途径来进行 bug 修复和功能提升 - 谨慎发布智能合约 。 尽量在正式发布智能合约之前发现并修复可能的 bug。 - 对智能合约进行彻底的测试，并在任何新的攻击手法被发现后及时的测试（包括已经发布的合约） - 从 alpha 版本在麒麟测试网(CryptoKylin-Testnet)上发布开始便邀请专业安全审计机构进行审计，并提供漏洞赏金计划(Bug Bounty) - 阶段性发布，每个阶段都提供足够的测试 - 保持智能合约的简洁 。复杂会增加出错的风险。 - 确保智能合约逻辑简洁 - 确保合约和函数模块化 - 使用已经被广泛使用的合约或工具（比如，不要自己写一个随机数生成器） - 条件允许的话，清晰明了比性能更重要 - 只在你系统的去中心化部分使用区块链 - 保持更新 。通过公开资源来确保获取到最新的安全进展。 - 在任何新的漏洞被发现时检查你的智能合约 - 尽可能快的将使用到的库或者工具更新到最新 - 使用最新的安全技术 - 清楚区块链的特性 。尽管你先前所拥有的编程经验同样适用于智能合约开发，但这里仍然有些陷阱你需要留意： - require recipient(account name name) 可触发通知，如果账户 name 下有合约，会调用 name 合约中的同名函数，官方文档 已知漏洞 数值溢出 在进行算术运算时，未进行边界检查可能导致数值上下溢，引起智能合约用户资产受损。 漏洞示例 存在缺陷的代码： batchtransfer 批量转账 防御方法 尽可能使用 asset 结构体进行运算，而不是把 balance 提取出来进行运算。 真实案例 - 【EOS Fomo3D你千万别玩】狼人杀遭到溢出攻击, 已经凉凉 权限校验 在进行相关操作时，应严格判断函数入参和实际调用者是否一致，使用 require auth 进行校验","default_branch":null,"files":null,"tree":[],"storefront":"/r/slowmist","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/slowmist/eos-smart-contract-security-best-practices/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}