
一、先明确适用范围
“net 区块链 应用需要注意哪些问题”可以从应用与区块链交互的安全边界理解。这里不将 net 认定为具体项目或品牌;合约部分主要适用于以太坊智能合约,通信部分适用于通过网络交换数据的客户端与服务端。
安全检查应区分两个问题:谁有权改变链上状态,以及应用与服务端之间的数据如何受到保护。解决其中一个,不能代替另一个。
二、敏感操作必须检查权限
以太坊开发者文档的智能合约安全章节强调,公开可调用的函数需要对敏感操作设置访问控制。单一所有者、按角色分权和多签管理,是不同的权限组织方式。
设计时应明确每项管理操作由谁执行、需要谁批准。角色拆分不等于自动消除单点风险;如果关键权限仍集中在同一控制者手中,账户失陷的影响仍可能很大。
三、执行条件与测试需要相互配合
合约应检查输入、调用者权限和业务状态,并在条件不满足时回退。内部不变量则用于表达执行过程中必须保持成立的规则。
上述安全章节还介绍了单元测试、静态分析、模糊测试和独立审查。检查不能只覆盖正常流程,还应考虑越权、边界输入及异常调用。形式化验证的结论受所定义性质与模型约束,不能理解为整个应用绝无漏洞。
四、通信加密不能替代业务授权
RFC 8446 定义了 TLS 1.3,其目标包括保护客户端与服务端通信,抵御窃听、篡改和消息伪造。这与智能合约权限属于不同层面的防护。
加密连接并不证明请求具有业务授权,也不证明合约逻辑正确。同样,不能因为通信受到 TLS 保护,就把它理解为链上数据具有保密性。
五、上线前常见疑问
经过审计是否就可以放心上线?不能。独立审查能补充开发团队的检查,但无法保证发现全部缺陷。
发现漏洞后能否像普通服务一样直接修补?不能默认如此。已部署合约通常不能直接修改代码,因此修复方式与管理权限应在设计阶段考虑,而不是等事故发生后再决定。
检查清单应覆盖权限、执行条件、测试审查和通信保护,并逐项记录适用范围。某一层防护通过检查,不代表其余层面已经安全。