一篇让你读完上手的“NFT确权”指南:别被JPEG骗了,这行代码才是资产证明
你有没有想过——你花了几万块买的一个“NFT头像”本质上只是一串代码里的一行记录。不是你想象中的那张图片。那张图片可能存某个服务器上。哪天服务器一关图片没了但你的“所有权”还在链上写着。所以问题来了你买的到底是那张图还是链上的那行字说白了这行代码才是你真正的资产证明。先给你看个数据2023年8月全球NFT月交易额冲到过49.5亿美元。但同一时期研究人员扫描了87,839个ERC-721合约发现了44,863,255个“脆弱的NFT绑定”缺陷1,373个“不符合规范”的实现105个“植入后门”什么概念近9万个NFT合约里藏着超过4485万个潜在问题。你的NFT可能就踩中了其中一个。先搞清楚NFT到底怎么“确权”的一张图看懂text┌─────────────────────────────────────────────────────────────┐ │ 你的NFT 三样东西 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ️ 唯一Token ID → 就像房产证上的编号 │ │ 合约地址 → 就像“这个房产归哪个区管” │ │ 元数据链接 → 指向那张图片的“地址” │ │ │ │ 缺了任何一个你的“所有权”都不完整 │ │ │ └─────────────────────────────────────────────────────────────┘NFT通过ERC-721智能合约来执行确权规则。核心接口就这几个函数干什么的ownerOf(tokenId)查这个NFT现在归谁balanceOf(address)查这个人有多少个NFTtransferFrom()把NFT转给别人tokenURI(tokenId)返回一个链接指向这个NFT的“说明书”每个ERC-721代币都有一个唯一编号tokenId它和所有权、元数据绑定在一起。你买的不是那张图你买的是这组绑定关系。但是——这组绑定关系可以被“篡改”你猜怎么着很多NFT项目的tokenURI是可以改的。项目方今天把tokenURI(1)指向ipfs://QmXXX/1.json明天可以改成指向另一张图。你手里的“所有权证明”指向的东西变了。你买的是一只猴子项目方改完之后你手里可能变成了一块石头。这不是危言耸听。这是元数据篡改Metadata Tampering——NFT领域最常见的风险之一。来看一段真实的NFT合约代码这是一个简化版的NFT合约solidity// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import openzeppelin/contracts/token/ERC721/ERC721.sol; import openzeppelin/contracts/access/Ownable.sol; contract MyNFT is ERC721, Ownable { string public baseURI; constructor(string memory _baseURI) ERC721(MyNFT, MNFT) { baseURI _baseURI; } // ⭐ 关键这个函数决定了你的NFT指向什么 function tokenURI(uint256 tokenId) public view override returns (string memory) { require(_exists(tokenId), Token does not exist); return string(abi.encodePacked(baseURI, Strings.toString(tokenId), .json)); } // ⚠️ 危险只有owner可以改baseURI // 但如果owner是一个钱包而不是多签……风险就来了 function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI _newBaseURI; } // 批量铸造 function batchMint(address to, uint256 amount) public onlyOwner { require(amount 0, Amount must be greater than zero); for (uint256 i 0; i amount; i) { _mint(to, totalSupply() 1); } } }这段代码看起来没问题对吧但审计的时候你要问三个问题onlyOwner——这个owner是谁一个人一个多签还是一个黑洞地址setBaseURI——改完之后所有NFT的tokenURI都变了用户知情吗batchMint——owner可以无限增发你的NFT会贬值吗NFT合约的四大“杀手级”漏洞 漏洞一重入攻击ERC-721有个安全机制叫ERC721Receiver用来防止NFT被转到不支持NFT的合约里。但这个机制会触发外部调用攻击者可以利用这个外部调用“重入”合约。真实场景一个叫TheMasks的NFT合约规定每笔交易最多铸造20个NFT总量有上限。攻击者调用mintNFT(20)在_safeMint触发的外部回调里再次调用mintNFT(20)。因为totalSupply()还没更新完合约以为还没到上限结果——攻击者一单铸造了110个NFT远超20个的限制。2025年多个Pepe NFT项目因重入和拒绝服务漏洞被攻击损失超过100万美元。 漏洞二无限制铸造Unrestricted Minting典型问题mint函数没有任何限制任何人都可以无限铸造。solidity// ❌ 危险 function mint(address to) public { _mint(to, totalSupply() 1); } // ✅ 安全加限制 function mint(address to) public onlyWhitelisted { require(totalSupply() MAX_SUPPLY, Sold out); require(!hasMinted[msg.sender], Already minted); _mint(to, totalSupply() 1); } 漏洞三签名可重放Replayable Signatures很多项目用签名来验证白名单。但如果签名里没有包含链ID、合约地址、过期时间攻击者可以把一个项目的签名拿到另一个项目上用。2025年Immunefi审计竞赛中就发现了多个签名重放漏洞攻击者可以利用它跨合约铸造NFT。 漏洞四权限过于集中owner一个人能改元数据、能增发、能提款、能暂停合约。如果owner的私钥被盗了——整个项目就没了。这就是为什么顶级项目都用多签钱包时间锁来管理合约。NFT审计要查什么我给你列个清单检查项要查什么铸造控制有没有总量上限有没有白名单限制元数据治理tokenURI能不能被改改之前有没有时间锁签名机制签名里有没有链ID、nonce、过期时间权限设计owner是谁多签还是单点有没有时间锁重入防护有没有ReentrancyGuard外部调用前后状态更新了吗升级能力合约能不能升级谁有升级权限支付与提款用的是pull模式还是push模式真实案例Gondi NFT平台被黑2025年7月NFT借贷平台Gondi遭遇合约漏洞攻击。损失金额23万美元。攻击者利用了合约中的某个逻辑缺陷绕过了权限检查。23万美元就从一个“不起眼”的漏洞里流走了。作为普通用户你怎么保护自己✅ 买NFT之前做这四件事查合约有没有审计报告——没审计的默认有风险看owner是谁——如果是单钱包跑如果是多签时间锁相对安全问三个问题能无限铸造吗能改图吗能暂停转账吗用工具扫一下——比如Honeypot Rug Detector或NFTGuard✅ 交易时做这件事模拟签名——用Pocket Universe这类工具在签名前预览一下这笔交易到底会转走什么资产。别盲签。盲签是丢NFT最快的方式。最后给你总结一下NFT不是那张图。那张图只是存在某个地方的图片文件。真正的资产是链上那行代码里的一串记录——ownerOf(tokenId) 你的地址。但前提是这行代码写得对这行代码没被篡改这行代码的权限没落在坏人手里所以别光看图片好不好看。去看代码。那行代码才是你真正的资产证明。

相关新闻

Vue 3 + Highcharts Boost 可视化加速模块的完整示例

Vue 3 + Highcharts Boost 可视化加速模块的完整示例

下面是一个 Vue 3 Highcharts Boost 的完整示例&#xff0c;使用 highcharts-vue&#xff0c;并在组件内初始化 Boost 模块。 1) 安装 npm install highcharts highcharts-vue2) 组件示例 <script setup lang"ts"> import { computed } from vue; import High…

2026/10/11 7:09:02 阅读更多 →
notepad-- 文件对比实战指南:3 步上手差异比对,5 个技巧让代码核查快 10 倍

notepad-- 文件对比实战指南:3 步上手差异比对,5 个技巧让代码核查快 10 倍

notepad-- 文件对比实战指南&#xff1a;3 步上手差异比对&#xff0c;5 个技巧让代码核查快 10 倍 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器&#xff0c;目标是做中国人自己的编辑器&#xff0c;来自中国。 项目地址: https://gitcode.com/GitHub_…

2026/10/16 2:00:31 阅读更多 →
完整入门vscode-mermaid-preview:3步实现Mermaid图表实时预览与高清导出

完整入门vscode-mermaid-preview:3步实现Mermaid图表实时预览与高清导出

完整入门vscode-mermaid-preview&#xff1a;3步实现Mermaid图表实时预览与高清导出 【免费下载链接】vscode-mermaid-preview Previews Mermaid diagrams 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-mermaid-preview 作为经常写技术文档的开发者&#xff0c;…

2026/10/11 2:49:42 阅读更多 →

最新新闻

【共创稿事节】HarmonyOS 7 Agent 开发实战 09:Agent 测试评测集

【共创稿事节】HarmonyOS 7 Agent 开发实战 09:Agent 测试评测集

做 Agent 应用最怕的不是「写不出第一版」&#xff0c;而是「改了第三版之后&#xff0c;发现第一版明明答对的题现在答错了」。大模型有随机性、提示词有耦合、工具调用有边界&#xff0c;靠人肉聊天抽查既覆盖不全又无法回放。这一篇我们给 Agent 配上一套离线评测集&#xf…

2026/10/17 7:41:11 阅读更多 →
智能体密钥管理实战:Hermes与Agent Vault凭据注入与安全审计

智能体密钥管理实战:Hermes与Agent Vault凭据注入与安全审计

1. 为什么智能体需要一个“管钥匙的保安”做过 Agent 项目的人大概都有过这种体验&#xff1a;功能跑通了&#xff0c;Demo 演示也很顺利&#xff0c;但一旦要往生产环境推&#xff0c;心里就开始发虚。原因往往不是模型不够聪明&#xff0c;也不是编排逻辑有 bug&#xff0c;而…

2026/10/17 7:41:11 阅读更多 →
Flink Operator State 深度解析:从原理到批量 Sink 实战

Flink Operator State 深度解析:从原理到批量 Sink 实战

1. 为什么 Operator State 值得单独拎出来讲Flink 的状态体系里&#xff0c;Keyed State 出镜率极高&#xff0c;几乎每篇讲状态的资料都会先拿 keyBy 之后的 ValueState、ListState 举例。但真正落到生产环境&#xff0c;有一类状态是绕不开的&#xff1a;它不依赖 key&#x…

2026/10/17 7:41:11 阅读更多 →
Flink Operator State 深度解析:非键控状态管理实战指南

Flink Operator State 深度解析:非键控状态管理实战指南

1. 为什么 Operator State 值得单独拎出来讲Flink 的状态管理一直是流计算里最容易被低估的一块。大部分人刚上手的时候&#xff0c;注意力都放在窗口、水位线、Checkpoint 这些"显眼"的机制上&#xff0c;等到真正在生产环境里跑起来&#xff0c;才发现状态才是决定…

2026/10/17 7:41:11 阅读更多 →
RPA+大模型:打造外部群聊专家级自动应答系统

RPA+大模型:打造外部群聊专家级自动应答系统

1. 从一线需求说起&#xff1a;为什么群聊回应也能自动到“专家级”做运营和客户成功的朋友&#xff0c;大概率都经历过这种状态&#xff1a;手机里挂着四五个外部群&#xff0c;每个群都在问问题&#xff0c;有的问报价&#xff0c;有的问故障排查&#xff0c;有的纯粹是闲聊。…

2026/10/17 7:41:11 阅读更多 →
地质工程一体化实战:从地质建模到随钻导向与压裂设计的闭环

地质工程一体化实战:从地质建模到随钻导向与压裂设计的闭环

你要是问一个油气田开发工程师&#xff0c;最怕听到哪句话&#xff0c;十有八九是——“模型是这么说的&#xff0c;但井不是这么钻的。”这种地质和工程互相不认账的场面&#xff0c;在非常规油气、复杂油气藏开发里几乎每隔几天就来一次。模型画得再漂亮&#xff0c;现场不买…

2026/10/17 7:40:11 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介&#xff1a;《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南&#xff0c;重点围绕V3与R1两款模型的能力差异与适用场景展开&#xff0c;帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件&#xff0c;压缩包大小约311KB&#xff0c;篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介&#xff1a;这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档&#xff0c;共收录两百余条可直接套用的润色指令&#xff0c;涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度&#xff0c;并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介&#xff1a;本资源是一份基于OpenCV的本科课程设计完整报告&#xff0c;面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生&#xff0c;解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →