智能合约开发中13种最常见漏洞及修复(精华版)

智能合约一旦部署便不可篡改,安全漏洞往往直接导致资产损失。本文提炼13种常见漏洞中最重要的8种,用最简洁的方式给出原理与核心修复方案。


1. 重入攻击

原理 :先转账后扣款,攻击者通过递归调用不断提款。

修复 :先更新状态,再转账。

复制代码
balances[msg.sender] -= _amount;
msg.sender.transfer(_amount);

2. 整数溢出与下溢

原理 :数值超出范围时回绕(溢出归零,下溢变最大值)。

修复:使用 Solidity 0.8+ 内置检查,或 SafeMath。

复制代码
balance = balance + amount;  // 0.8+ 自动抛出异常

3. 未授权访问

原理 :提款、重置等关键函数未加权限限制。

修复:添加访问修饰器。

复制代码
modifier onlyOwner() { require(msg.sender == owner); _; }
function withdraw() public onlyOwner { ... }

4. 断言失败导致锁死

原理 :assert() 用于不可恢复的内部错误,一旦失败 Gas 全耗且资金可能永久锁定。

修复 :外部校验改用 require()。

复制代码
// assert(msg.sender == owner)
require(msg.sender == owner, "Not owner");

5. 时间戳依赖

原理 :矿工可小幅度操纵 block.timestamp,影响博彩、截止时间等。

修复:用区块高度替代精确时间戳。

复制代码
deadline = block.number + blocksToWait;

6. Gas 耗尽与 DoS 攻击

原理 :无限循环或海量遍历耗尽调用方 Gas,导致交易回滚。

修复:限制循环次数,避免遍历动态数组。

复制代码
require(n <= 1000, "Loop limit");
for(uint i=0; i<n; i++) { ... }

7. 权限管理不当

原理 :管理员权限过大(如无限铸币),私钥泄露即灾难。

修复:分权、多签、日限额。

复制代码
require(dailyMinted + amount <= dailyLimit, "Over limit");

8. 存储与计算效率低下

原理 :数组动态扩容和全量遍历消耗巨额 Gas。

修复:用映射 + 计数器代替数组。

复制代码
// 映射加计数器
mapping(address => bool) public voted;
uint256 public totalVotes;

以上为精华版,本文原版共涵盖 13 种漏洞 ,包括短地址攻击、代理漏洞、随机数漏洞等,并附详细攻击演示与审计代码。

🔗 阅读完整版请访问: https://www.jay-r-j.top/smart-contract-vulnerabilities/

相关推荐
小蒋观天下4 小时前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
谢亮_vipxieliang5 小时前
Kubernetes 1.36 深度解读:从 kubelet 安全到 GPU 原生调度的 70 项改进
安全·kubernetes·kubelet
梦帮科技5 小时前
【3.0修订版】跨链中继与事件编排:Relayer 监听、多签验证与故障自愈
web安全·金融·区块链·密码学·智能合约·安全架构·信任链
YH行业报告分析5 小时前
2026衬氟调节阀市场深度解析:耐腐蚀流体控制设备如何赋能化工行业安全升级?
安全
赛博守夜人6 小时前
跨境业务与出海合规之九:海外买量投放与营销虚假流量(Ad Fraud):跨国机房群控与归因欺诈识别算法
算法·安全
loong_XL6 小时前
决策模型做内容安全检测:从踩坑到上线
数据库·安全·jev·决策模型
晓德6 小时前
0、LLM大模型安全学习系列(启)
学习·安全
程序哥聊面试7 小时前
什么是 Sandbox?给 AI Agent 划一道安全边界
人工智能·安全
ZDGJ60997 小时前
如何判断国际期货交易品种的流动性
区块链
王大傻09287 小时前
堆叠注入(Stacked Queries Injection)详解:原理、利用与防御
服务器·网络·数据库·web安全·网络安全