CorDapp 安全编码指南

原文地址:https://docs.corda.net/secure-coding-guidelines.html

Corda 平台的设计默认已经考虑到安全因素。但是不幸的是平台没办法避免每种安全的错误。这篇文章描述了当编写应用的时候,都要考虑哪些方面来阻止各种类型的攻击。我们假设对方会尝试着使用 flow 级别的攻击来破坏你的交易,当你可能要快速添加更多的合作伙伴并且没有过多的验证的时候,对于软件安全的依赖会让后来的维护工作变得很难。

Flows

编写 flows 是你的应用如何同网络中的其他节点进行沟通的方式。因此他们是恶意数据进入到你的应用的一个典型的入口,所以必须要谨慎地对待。

receive 方法返回的数据会被包装在 UntrustworthyData<T> marker 类型中。这个类型并没有添加任何的方法,它被放在这仅仅是为了提醒你对于从网络中获得的任何信息都要正确的验证。记住,在另一端的节点可能并没有运行你提供给他的代码:他们被允许做任何事情!你需要注意的事情包括:

思路应该很清晰了:提供签名是一个非常敏感的操作,所以你必须要确定你将要提供签名的是什么,并且在 small print 中没有什么被改动了!一旦你向对方在一个 transaction 中提供了签名,你就没法做任何事情来阻止这些提交到账本中了。

合约

合约是在一个 JVM 沙盒(sandbox)中的任何的方法,因此 they have a lot of leeway to shoot themselves in the foot。需要关注的点包括: