
一、先明确关键词与适用范围
“net”不能单独确定具体项目或开发框架。若指.NET技术栈,下文也不构成对某个库或版本的兼容性结论,而是讨论区块链网页应用的通用安全要求。Ethereum安全文档侧重合约,MDN安全文档侧重网站,两者对应不同层面的防护,不能互相替代。
二、敏感操作应有明确权限
Ethereum文档强调访问控制、操作条件约束、独立审查和规范开发。对于具有管理功能的合约,应明确谁能修改配置、暂停业务或执行升级,再依据职责配置权限。
公开可调用不等于任何人都有权执行敏感操作;函数可见性不能代替业务授权。角色分工与多重签名解决的问题也不同:前者划分职责,后者要求多人同意。两者都需要合理配置,不能直接等同于消除了全部风险。
三、异常处理与部署后维护
合约应检查输入、调用身份和业务状态,不满足条件时拒绝执行。条件检查是否有效,取决于规则是否完整,而不是检查语句的数量。
部署后的合约通常不能像普通服务器程序一样直接修改。上线前应明确维护与变更边界;如采用可升级设计,还需说明升级权限和治理约束。可升级不是天然安全,也不意味着可以忽略前期设计。
四、网页入口仍需独立保护
MDN建议使用HTTPS、内容安全策略、安全Cookie、输入验证与输出处理,并保护认证、会话及软件依赖。即使核心逻辑在链上,这些网页防护仍然适用。
输入验证与输出处理并非重复工作:前者判断内容是否符合业务要求,后者确保内容以安全方式呈现在页面中。应用应同时保护入口和展示环节,而不能因为数据来自区块链就默认可信。
五、审查不是永久安全保证
独立代码审查能补充开发团队的检查,但不能保证发现所有缺陷。形式化验证也受模型、规格和假设约束,不能被解释为整个应用绝无错误。
版本管理、变更复核与清晰文档有助于持续维护。审查结果应对应明确版本;合约、前端或依赖发生变化后,需要重新评估相关影响,不能一直沿用旧结论。
六、常见问题:登录是否等于授权
身份认证回答“你是谁”,授权回答“你可以做什么”。用户成功登录网站,不代表其应当拥有合约管理权限。设计时应分别梳理网页账户、业务操作与合约权限,并明确各自的检查位置和负责人。