Solidity面试题更新 2026-08-05

在 Solidity 智能合约开发中,常见的安全漏洞有哪些?请说明相应的防范措施。

安全意识技术原理Solidity

考察说明

考查对 Solidity 智能合约常见安全漏洞及对应防护措施的理解和掌握程度。

回答思路

  1. 【回答框架 1】重入攻击是典型漏洞,攻击者在外部调用未更新状态时递归调用合约函数,导致资金被多次提取,防范措施包括使用互斥锁、检查-效果-交互模式(先更新状态再调用外部)、使用转账限制或重入保护库。
  2. 【回答框架 2】整数溢出/下溢是另一类常见问题,Solidity 0.8 版本前需使用 SafeMath 库或手动检查,0.8 版本后默认检查,但仍需注意隐式转换和复杂运算场景,建议使用 SafeMath 风格库或显式检查。
  3. 【回答框架 3】未授权访问和权限控制缺失可能导致合约被恶意操作,应使用修饰符(如 onlyOwner)确保敏感函数仅允许授权地址调用,并设置合理的权限角色模型。
  4. 【回答框架 4】其他常见漏洞包括:拒绝服务(如意外自毁或无限循环)、前端攻击、随机数可预测、时间戳依赖等,防范需进行彻底测试、审计、限制外部调用和确保逻辑严谨。
  5. 【回答框架 5】除代码层面,还需注意部署安全,如使用多重签名钱包管理合约,定期更新依赖,避免使用不安全的第三方库,以及保持代码简洁和模块化。
  6. 【关键点 1】重入攻击防护:采用检查-效果-交互模式和重入锁。
  7. 【关键点 2】Solidity 0.8 后默认整数溢出检查,但需注意隐式转换。
  8. 【关键点 3】使用权限修饰符确保未授权调用被拒绝。
  9. 【关键点 4】防范拒绝服务:避免意外自毁和无限循环。
  10. 【关键点 5】彻底测试和审计是确保安全的关键。
  11. 【易错点 1】仅依赖 Solidity 0.8 的溢出检查而忽略隐式转换和复杂运算的边界情况。
  12. 【易错点 2】重入攻击防护时忘记先更新状态再调用外部合约。
  13. 【易错点 3】错误假设所有外部调用都是安全的,未考虑 gas 限制导致拒绝服务。