技能使用指南

security(智能合约安全)Skill 是什么?能防住哪些 Solidity 漏洞?

智能合约安全Skill(security,技能ID 13689)为 Solidity 开发者提供重入攻击、代币小数错误、预言机操纵、无限批准等九类高危漏洞的防御性代码对照,附 12 项预部署安全清单与代理升级、MEV 防护要点。支持在 AI 助手中一键启用,编码阶段即可自查修复,让上线前的安全检查从凭感觉变成按清单执行,立即上手为你的合约加一道防线。

智能合约安全Skillsecurity
8 个章节 约 17 分钟阅读 AI 智能生成

智能合约安全Skill:在部署之前,把重入、预言机操纵和代币小数错误挡在门外

核心结论速览

  • 定位精准:这个技能不讲空泛的"要注意安全",而是给出错误写法与正确写法的对照实现,把防御性代码直接落进 Solidity 合约里。
  • 覆盖高频雷区:代币小数不一致、无浮点数导致的精度截断、重入攻击、非标准 ERC20、DEX 现货价预言机、ERC-4626 金库通胀攻击、无限批准、访问控制缺失、输入校验遗漏——九类真实造成过资金损失的坑。
  • 自带交付物:一份 12 项的预部署安全清单,可在每次上线前逐条打勾,把"靠感觉"变成"靠流程"。
  • 进阶议题齐全:MEV 三明治攻击、代理与可升级性(UUPS 与透明代理取舍、存储布局规则)、EIP-712 签名重放、delegatecall 任意地址调用的致命风险。
  • 边界清晰:它是最省时间的"上线前自检助手",但不能替代专业审计,最终结论仍需人工复核与工具验证。

1. 该技能叫什么?如何一键安装 AI 技能提升开发效率?

基础信息

项目 内容
技能中文名 智能合约安全Skill
技能英文名 security
技能ID 13689
技能类型 代码安全审查 / 防御性编码助手
核心能力 Solidity 安全模式、常见漏洞识别、预部署审计清单

它解决什么问题

智能合约开发者最常见的三种错觉,恰恰是它的切入点:

  1. “我用的 Solidity 0.8+,溢出被语言自动检查,所以我是安全的。” 事实是,溢出只是数十种攻击向量中的一种。当下真正造成大额损失的是重入攻击、预言机价格操纵、授权(approve)漏洞以及代币小数处理错误。
  2. “我测过了,代码能跑通。” 能正确运行不等于安全。绝大多数漏洞利用的是开发者从未设想过的调用顺序或输入值——函数被以你意想不到的参数组合调用。
  3. “我这个合约很小,不值得审计。” DAO 事件源于一处并不复杂的重入缺陷,Euler 事件源于一处缺失的检查。合约规模与安全等级没有因果关系。

这个技能的价值就在于:它对每一个高风险点都同时给出"错误的实现方式"和"正确的防护实现",让修正动作变得可以直接执行。

一键安装的思路与步骤

  1. 确认前提:需要一个支持"技能"机制的 AI 助手运行环境(例如支持技能市场、技能列表或技能插件机制的开发者客户端或编程助手)。环境不具备技能能力时,即使拿到技能内容也无法自动挂载。
  2. 检索技能:在技能市场 / 技能列表 / 技能搜索入口中,用技能中文名「智能合约安全」、英文名 security 或技能ID 13689 检索。注意英文名 security 属于通用单词,若有多个同名结果,请以技能ID 13689 为准进行区分。
  3. 一键添加:在检索结果中执行添加 / 安装 / 启用操作,使其挂载到当前会话或工作区。
  4. 验证是否生效:不必先读文档。直接贴一段有外部调用的提款函数并提问:“这个函数存在重入风险吗?请给出修复后的写法。” 如果回答能明确指出"外部调用后更新状态"的时序问题、给出**检查 → 效果 → 交互(CEI)**模式的改写,并提到非重入保护,说明技能已经正确加载。
  5. 注意:具体安装命令、入口地址、权限配置与版本要求会随宿主平台变化,以官方说明为准;本文不虚构任何命令与链接。

2. 该技能的主要功能和特点

  • 九类漏洞的"坏写法 / 好写法"双栏对照 不是只喊"小心重入",而是同时摆出有漏洞的版本和加了检查、效果、交互顺序、又加了重入保护的版本,读者可以逐行替换。

  • 代币小数差异的专门处理 明确列出常见精度:USDC 与 USDT 是 6 位、WBTC 是 8 位、DAI 与 WETH 及大多数代币是 18 位。禁止硬编码 1e18,改为读取代币元数据的 decimals();跨精度运算时先归一化(例如把 6 位小数金额乘以 1e12 提升到 18 位)。

  • 精度问题的正确姿势 Solidity 没有浮点数,除法直接截断。技能给出标准解法:用基点(1 bp = 0.01%)表达费率,500 即 5%,计算时先乘后除;复杂数学建议引入定点数学库。

  • 非标准代币怪癖清单 转账手续费代币(实际到账小于发送金额,必须比对转账前后余额)、变基代币(余额会自行变化,应使用包装版本)、可暂停代币(代币暂停时转账会回滚)、黑名单代币(特定地址被禁止交易)。并强调统一使用 SafeERC20 包裹所有代币操作。

  • 预言机安全红线 明确禁止用 DEX 现货储备比作为价格来源——闪电贷可以在单笔交易内把池子价格打歪。可选方案为 Chainlink 价格源(配陈旧性检查与合理性检查)或 30 分钟以上的时间加权平均价格(TWAP)。

  • 金库通胀攻击的完整推演 用五步还原 ERC-4626 首个存款人如何通过"存 1 wei + 直接捐赠"把份额价格抬到让后来者算出 0 份额,并给出虚拟偏移的修复公式,同时提示 OpenZeppelin 的 ERC4626 实现默认已包含该缓解措施。

  • MEV 与三明治攻击的防护 区分"何时 MEV 重要"(DEX 兑换、大额 DeFi 操作、热门 NFT 铸造)与"何时不重要"(普通转账、L2 交易、私有内存池交易),并给出设置明确最小输出、使用私有交易通道、收紧滑点等具体做法。

  • 代理与可升级性的取舍框架 用表格对比 UUPS 与透明代理在升级逻辑位置、用户燃气成本、推荐度与风险上的差异,并列出五条关键规则(用 initializer 而非构造函数、存储布局只允许末尾追加、使用可升级版本库、构造函数中禁用初始化器、升级权限移交多签)。

  • EIP-712 与 delegatecall 的边界 说明域分离器、nonce、deadline 三件套如何阻止跨合约与跨链重放;并强调 delegatecall 到用户提供的地址等于把存储控制权交出去。

  • 与自动化工具衔接 给出静态分析(Slither)、符号执行(Mythril)、Foundry 模糊测试与燃气报告的命令入口,并列出"Slither 发现绝不能忽视"的四类告警。

  • 和普通工具的差别 普通静态分析工具输出的是告警编号与位置,需要你自己判断严重性;这个技能输出的是为什么会出事 + 应该改成什么,更适合在编码阶段边写边修。


3. 如何使用该技能?

推荐使用流程

  1. 触发技能:在对话中直接说明意图,例如"帮我做部署前的安全自检"“这段 Solidity 有安全问题吗”,或直接引用技能名称。技能描述里已写明适用时机:部署任何合约之前、审查代码时、以及构建任何持有或转移价值的合约之前。
  2. 投喂上下文:把合约源码、关键函数片段或设计描述贴进来。信息越完整,判断越准——至少要包含涉及外部调用、代币转账、权限控制与价格读取的部分。
  3. 要求按清单逐项过:让技能以 12 项预部署清单为骨架逐条给出结论,而不是泛泛而谈。清单包括访问控制、重入保护、代币小数处理、预言机安全、整数数学、返回值检查、输入验证、事件发射、激励设计、无限批准、转账费用安全、边缘情况测试。
  4. 索要修复代码:对每一个被点名的风险,要求给出"改前 / 改后"的对照实现,避免停留在描述层。
  5. 用高价值问题追问:例如"我接受的代币可能是 6 位小数吗"“这个价格来源是否可被闪电贷操纵”“这处批准是否等价于无限授权”“升级时我会不会打乱存储布局”。
  6. 收口与复查:要求输出一份可留存的风险清单,修复后再次提交,让技能做一次回归检查。
  7. 叠加自动化验证:按技能给出的工具入口在本地跑静态分析与模糊测试,把"人工判断"和"机器扫描"交叉验证。

输入示例(提款函数自检)

输入:贴出一段函数——先读取用户余额,用底层调用把 ETH 转给用户,成功后才把余额置零;请按重入攻击的视角审查,并给出修复后的完整函数。

期望输出要点

技能应当指出:状态更新发生在外部调用之后,攻击者可以在回调中使用尚未清零的余额再次提款;修复方向是改为 CEI 顺序(先校验余额大于零 → 先把余额置零 → 最后执行外部调用并检查返回值),同时叠加非重入保护作为第二道防线。

输出结构参考

  • 风险等级与位置
  • 触发条件与攻击路径
  • 修复后代码
  • 对应清单条目(便于你回填到自己的上线检查表)

4. 同类型竞品对比分析

方案名称 定位 核心功能 安装/使用门槛 适用场景 优势与不足
智能合约安全Skill(security,技能ID 13689) AI 助手内的安全审查与防御性编码顾问 九类漏洞对照实现、12 项预部署清单、代理与签名安全、MEV 防护、工具链指引 低。在支持技能的 AI 环境中检索并启用即可,用自然语言提问;具体入口以官方说明为准 编码阶段边写边修、上线前自检、Code Review 补位、安全知识速查 优势:给出可直接落地的修复代码,解释"为什么",覆盖设计与实现两层。不足:不执行符号执行与模糊测试,结论依赖人工复核,不能替代正式审计
Slither 静态分析工具 模式匹配扫描常见漏洞、未检查返回值、危险 delegatecall、未保护的状态修改 中。需要本地安装与命令行操作,会输出较多告警需人工筛选 CI 流水线自动扫描、批量扫描存量代码 优势:自动化、可进流水线、覆盖稳定。不足:误报较多,只报位置不给修复方案,对业务逻辑漏洞无能为力
Mythril 符号执行工具 通过符号执行探索执行路径,寻找可达的漏洞状态 中高。需要配置环境,耗时随合约复杂度上升 关键合约的深度验证、与静态分析互补 优势:能发现路径相关的深层问题。不足:速度慢,复杂合约可能路径爆炸,结果解读需要经验
OpenZeppelin Contracts + 人工审计 经过实战检验的库 + 第三方审计服务 提供审计过的代币、访问控制、代理、重入保护、SafeERC20 等标准实现;审计方出具报告 库的使用门槛低;人工审计门槛与成本高 长期运行的协议、持有大额资产的合约 优势:库经过大量实战检验,审计报告具备对外公信力。不足:审计周期长、成本高、属于时点结论,改代码后需重新评估

选型建议:把智能合约安全Skill 当作"随身的编码级安全顾问",Slither 与 Mythril 当作"CI 里的自动扫描器",OpenZeppelin 当作"默认底座",人工审计当作"上线前的最后一道闸门"。四者是叠加关系,不是替代关系。


5. 该技能的典型应用场景与实际体验情况

场景一:独立开发者首次部署 DeFi 合约

角色:个人开发者,第一次写涉及资金转移的合约,没有团队可 review。 痛点:分不清哪些是"风格问题"、哪些是"会丢钱的问题"。 用法:把合约整体贴入,要求按 12 项清单逐条过一遍,重点看外部调用与代币转账部分。 体验:上手难度低,几乎零学习成本;收获最明显的是小数与精度这类容易被忽视的细节——例如原本打算硬编码 1e18 表示"一个代币",被指出 USDC 只有 6 位小数,等于要转出一万亿枚。

场景二:小团队的 Code Review 补位

角色:3 到 5 人的合约团队,Review 时间被排期挤压。 痛点:Review 容易停留在命名和注释层面,安全维度缺乏统一检查项。 用法:把技能输出的 12 项清单固化为 PR 模板,每个涉及外部调用、代币操作、权限变更的 PR 都要求作者先自检并贴出结论。 体验:把"凭经验 review"变成"按清单 review",一致性明显提升。需要注意的是,技能给出的结论仍需资深成员确认,特别是涉及经济模型与激励设计的部分。

场景三:可升级协议升级前的专项审查

角色:维护代理合约的协议方,需要发版新实现。 痛点:存储布局错位是最隐蔽的事故源,一旦打乱顺序,旧变量会读出错误的槽位数据。 用法:要求技能专门就"存储布局是否只做了末尾追加"“是否用 initializer 替代了构造函数”“构造函数是否禁用了初始化器”"升级权限是否已交给多签"逐条确认。 体验:这类问题人工 review 很容易漏,技能的规则化提示非常有效。注意:修改后必须重新跑一遍,不要拿旧结论复用。

场景四:前端与交互层防三明治攻击

角色:DApp 前端开发者。 痛点:合约没问题,但用户在前端兑换时被夹。 用法:就滑点设置、最小输出金额、私有交易通道的选择向技能求证。 体验:技能能清楚区分"合约层防护"与"用户/前端层防护",并说明 L2 交易与私有内存池场景下 MEV 风险较低,避免过度设计。

整体体验小结

  • 上手难度:很低,自然语言提问即可,不需要记命令。
  • 效果:在"已知高危模式"的识别与修复上表现稳定,尤其是重入时序、代币小数、SafeERC20、无限批准、预言机来源这五类,几乎每次都能命中。
  • 注意事项:其一,结论必须由人复核,模型可能误判业务语义;其二,它不代替静态分析与符号执行的机器验证;其三,跨版本语法与库接口存在差异,落地前请对照当前使用的库版本文档;其四,它不承诺发现全部漏洞,请把它当作"提高下限"的工具而非"保证上限"的保险。

6. 该技能能为用户带来的价值

效率层面:一次对话就能过完十余项安全检查点,把过去需要翻文档、翻事故复盘、翻审计报告才能拼齐的知识,压缩到几分钟。编码阶段发现问题,比上线后发现问题节省的成本通常高出数个数量级。

门槛层面:把"安全审计"从少数专家的领域,变成每个开发者都能执行的自检流程。哪怕你没有审计预算,也能拿到一份结构化的风险清单和可直接粘贴的修复代码。

可直接量化的收益方向:

  • 缩短上线前自检与 Code Review 的轮次;
  • 减少因代币小数处理错误导致的"资金去哪了"事故;
  • 降低因无限批准在被利用时造成的连带损失面;
  • 避免因存储布局错位导致的升级事故;
  • 减少因缺少最小输出保护而被三明治攻击吃掉的价差。

长期价值:技能输出的错误与正确写法对照,本质上是一份可沉淀的团队安全编码规范。用得越久,团队自有的检查清单越完善,对 OpenZeppelin 等标准库的正确用法也越熟练,最终形成"默认写安全代码"的工程习惯——这比任何一次单点修复都更有价值。


7. 常见问题 FAQ

Q1:这个技能怎么安装?需要写代码配置吗?

A:在支持技能机制的 AI 助手环境中,用中文名「智能合约安全」、英文名 security 或技能ID 13689 检索并一键添加即可,通常不需要写配置代码。由于 security 是通用词,建议用技能ID 精确匹配。具体的安装入口、命令与权限设置请以官方说明为准。

Q2:收费吗?

A:技能本身是否收费、是否包含在宿主平台的订阅中,取决于所在平台的定价策略,本文不掌握也不虚构任何价格信息,请以官方说明为准。需要注意的是,若你叠加使用第三方审计服务或商业工具,那部分成本需单独核算。

Q3:它能替代专业安全审计吗?

A:不能。它的定位是"上线前的自检助手 + 防御性编码参考",属于提高下限的工具。正式审计还包含人工对经济模型、治理机制与业务逻辑的深度推理,以及符号执行、模糊测试等机器验证。合理做法是:先用本技能做自查与修复,把明显问题清干净,再交给审计方,这样审计资源会集中在真正复杂的问题上。

Q4:它和 Slither、Mythril 这类工具怎么选?

A:不是二选一。Slither 与 Mythril 是自动扫描器,优势是无遗漏地跑规则、可接入持续集成,输出是告警位置;本技能是顾问,优势是解释风险成因并给出修复代码。推荐组合是:编码时用本技能边写边修,提交时用扫描工具自动拦截,上线前用清单收口。

Q5:适合谁用?完全没有 Solidity 基础能用吗?

A:最适合三类人:正在写涉及资金转移合约的 Solidity 开发者、需要做 Code Review 的团队技术负责人、以及负责代理升级与前端交互安全的工程师。完全没有 Solidity 基础的用户也能读懂风险描述,但不建议在不理解代码含义的情况下直接采用生成的修复代码——安全修复的正确性最终由人负责。