m mybian.xyz
mybian.xyz · 话题 · Solidity安全入门指南

Solidity安全入门指南:新手开发者必须建立的五个安全直觉

本文为Solidity新手梳理五个最关键的安全直觉,包括外部调用、整数处理、随机性与签名校验,结合[[Binance]]生态真实事故案例帮助初学者快速建立防线。

1101 关注 · 22 2026-05-24T17:15:15.806136+00:00

回答共 1 条

默认排序 ▾
m
mybian.xyz 主编
Solidity安全入门指南 领域深度内容
优秀回答者
Solidity安全入门指南 - Solidity安全入门指南:新手开发者必须建立的五个安全直觉

Solidity安全入门指南:新手开发者必须建立的五个安全直觉

区块链合约一旦部署就近乎不可撤回,安全意识必须在写第一行代码时就建立起来。这篇入门指南不堆砌专业术语,而是用五个核心直觉把 Solidity 安全的基本盘讲透,让你少踩 90% 的新人坑。

一、外部调用是「与陌生人交易」

任何一次外部 call、delegatecall、staticcall 都要假设对方是恶意合约。这意味着:在外部调用之前必须先更新自己的 state;外部调用之后不要再依赖该地址返回的数据;如果可能就用 pull-payment 替代 push-payment。

这条直觉直接对应「Check-Effects-Interactions」模式。在 Binance Smart Chain 历史上多起重入事件,本质都是开发者在外部调用后才扣减余额。

二、整数运算必须显式管理

0.8 之前必须用 SafeMath;0.8 之后默认 checked,但 unchecked block 需要谨慎。不要因为代码看起来「应该没问题」就放任溢出可能。

涉及 USDT 余额、利率、份额的计算尤其敏感。一笔 underflow 可能导致用户余额瞬间变成天文数字,造成无限提款漏洞。新手要养成「每次算术都问一下溢出风险」的习惯。

三、不要相信链上随机数

块哈希、时间戳、blockhash 都不是真正的随机数。矿工或验证者可以在某种程度上影响这些值。任何涉及奖励分配、抽奖、罕见品产出的合约,都不能用这些值做核心随机源。

正确的做法是使用 Chainlink VRF、RANDAO 或商业可信随机数预言机。在 ETH 主网上有数十个项目因「便宜随机数」被精准套利,新手务必引以为戒。

四、签名验证三件套:domain、nonce、replay

如果你的合约接受 ECDSA 签名授权,必须做到三件事:使用 EIP-712 domain separator 防止跨合约重放;维护 nonce 防止单合约重放;明确签名内容包含目标 chainId 防止跨链重放。

少做任何一项都可能导致严重事故。在 BTC 跨链与多链桥这类场景,签名重放是最容易被攻击者利用的薄弱点。

五、权限模型不可省略

onlyOwner、AccessControl、Pausable 不是装饰,而是协议守护神。任何敏感参数变更(铸币、提款、参数调整)都必须经过受控的权限路径。

更进阶的做法是把核心权限放到多签或时间锁里,确保即使私钥泄露也有缓冲时间。新手项目最常见的错误是把所有权限给一个 EOA,私钥一旦泄露协议立即归零。

结语

这五个直觉看上去简单,但真正内化进每一行代码并不容易。把它们贴在显示器旁,写代码时主动复盘,你会发现自己的 Solidity 安全水平在几个月内就有质的飞跃。

110 赞同
发布于 2026-05-24T06:12:22.866988+00:00 · 更新于 2026-05-24T17:15:15.806136+00:00