开发者安全指南|如何增强开发安全性并最大限度地降低资产损失的风险?
2023-08-0116:49
本文来源于 Sui Foundation,为开发人员提供有关提高安全性和降低应用程序风险的建议。在 Sui 上构建任何应用程序的一个重要部分是防止威胁行为者的利用和攻击。对安全性的关注对于降低用户资产损失的风险以及开发人员和企业的声誉损害至关重要。Sui 安全和密码学社区的成员整理了一些应用程序开发人员在开发过程中应注意和避免的最佳实践。虽然有些经验是 Sui 独有的,但许多其他经验同样适用于所有区块链应用程序。 在 Devnet、Testnet 和 Mainnet 上使用不同的地址存储在 Devnet 和 Testnet 上的资产没有货币价值,这些网络可能会不时重置。然而,主网上的资产具有真正的货币价值,不适当的行为者无意中访问可能会导致金融漏洞。建议在 Devnet/Testnet 和 Mainnet 之间使用单独的凭据,以便仅限于具有合法和必要业务原因的人员访问 Mainnet。在网络之间重复使用地址可能会导致不必要的广泛访问,并增加出现操作错误的可能性。硬编码的密钥和助记词不应存储在公共 GitHub 存储库中账户密钥和助记词是控制链上资产访问的重要钱包凭据。虽然将这些凭证与应用程序代码的其余部分一起存储在 GitHub 存储库中可能很诱人,但如果存储库是公共的,则它允许对关键材料进行开放访问。GitHub 也是一个版本控制的存储库,添加密钥或助记符后,即使信息被删除,其他人仍然可以通过浏览存储库的历史记录来访问凭据。如果关键材料是硬编码而不是由代码生成,这特别影响安全性!一般来说,可以通过 CLI 工具或机器人直接从 UI 外部访问公共链上智能合约功能。如果您的应用程序有重要条件,例如最小或最大转账金额,那么在前端代码和智能合约代码中对这些条件进行断言检查非常重要,否则可能会绕过必要的检查,从而导致漏洞利用。Sui 对象 ID 由法定数量的验证者在对象创建时分配。创建后,对象 ID 将充当全局唯一标识符,并在对象的整个生命周期内保留。这种持久性使得对象 ID 成为随机性和熵的不良来源。对于依赖伪随机性或随机性(抽签、模拟、加密)来正常运行的应用程序来说,错误地依赖对象 ID 可能会导致直接的漏洞利用。事实上,如果在重复调用 dryRun RPC 期间任何字段始终呈现相同的字节,则此类字段将成为不合适的随机源。Clock() 也不是一个好的随机源,因为它可能会受到操纵。请务必限制对应用程序 VRF(可验证随机函数)或签名的访问VRF 经常被部署来确保随机结果(例如,以不同概率选择获胜者的彩票功能或以不同被猜测概率生成加密签名的签名功能)。但是,如果 VRF 可由其他人直接访问并且未锁定在应用程序内,则威胁参与者可以在名义应用程序代码路径之外调用 VRF。在抽奖的情况下,威胁行为者可以提前调用 VRF 来预测抽奖结果以获取经济利益。在加密签名的情况下,能够获得对任意输入进行签名的能力与使签名密钥本身受到损害同等的安全性。实施这个简短的技巧列表将使链上应用程序更加安全,最重要的是对最终用户来说更加值得信赖。如果您还有其他问题并需要有关如何最好地保护您的 Sui 应用程序的帮助,请报名参加 engineering office hours 以获得深入的技术咨询:https://docs.google.com/forms/d/e/1FAIpQLSdWPf0H-t-QWV0Ik_5o86mKFlVNFsu_r5fyDxIL9BW_oSxpwA/viewform?ref=blog.sui.ioSui Network 主网已上线,社区生态也有序启动,Sui World 作为亚太区最大的生态资讯和加速孵化平台,有丰富的生态空投、IDO、白名单福利,扫描下方二维码进群,快人一步,获取信息!公众号后台回复“1”,加入 SUI World 社区回复“加速”,获得 Move 加速器支持
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。