区块链 | 由外部实体导致的 NFT 安全问题

news2024/11/20 18:47:06

🦊原文: Understanding Security Issues in the NFT Ecosystem

🦊警告: 本文只记录了原文的第 6 节。



1 问题描述

NFT 所指向的数字资产(图片、视频等)必须是可以访问的,这样 NFT 才具有意义。NFT 可以通过以下两种方式链接数字资产:

( i ) (\mathsf{i}) (i) 如果 NFT 合约是 ERC-721 兼容的并且实现了元数据扩展,那么由该合约创建的代币在链上包含一个 m e t a d a t a _ u r l \mathsf{metadata\_url} metadata_url,它指向一个元数据(JSON)。反过来,这个元数据又包含一个 i m a g e _ u r l \mathsf{image\_url} image_url 字段,该字段指向实际的数字资产。

JSON 是指元数据采用的是 JSON 格式。

( i i ) (\mathsf{ii}) (ii) 然而,许多较老的代币不符合标准,并且不包含任何链上的 i m a g e _ u r l \mathsf{image\_url} image_url。相反,它们使用一些临时的、链下方案来链接一个资产。对于这样的 NFT,NFT 市场(NFTM)实施自定义支持,以便它们能够生成有效的图片 URL 。

NFTM 的全称是 NFT Marketplace

由于元数据和数字资产都存储在链下,它们并不享受与 NFT 本身相同的不可篡改性保证。当任何 URL 变得无法访问时,就会打破 NFT 与相应数字资产之间的链接。实际上,这些 URL 通常指向分布式存储服务(例如 IPFS),或者是中心化存储(例如一个网页域名或 Amazon S3 存储桶)。

不知道这段说的是第二种方式,还是都有在说?

对于 IPFS URL,如果 NFT 所有者有所意识,TA 可以通过固定资源(即持续存储它)来保持 NFT “活跃”。即使这样做,也可能会有问题,因为 NFT 并不存储实际资源的哈希值,而是存储指向 IPFS 网关 Web 服务的 URL 。如果网关变得不可用,NFT “断裂”。总的来说,包含指向 NFT 所有者控制之外域名的 URL 的 NFT,在相应的域名消失时有失效的风险。



2 定量分析

我们进行了一次分析,以量化由于上述原因而 “丢失” 的 OpenSea NFT 的数量。

截至 2021 年 6 月 15 日,我们从 OpenSea 获得的 12 , 215 , 650 \mathsf{12,215,650} 12,215,650 个资产中,只有 3 , 175 , 644 \mathsf{3,175,644} 3,175,644 个资产具有有效的 m e t a d a t a _ u r l \mathsf{metadata\_url} metadata_url 字段。通过查询 OpenSea 的 API,我们获得了 8 , 363 , 550 \mathsf{8,363,550} 8,363,550 个具有非空 i m a g e _ u r l \mathsf{image\_url} image_url 字段的资产。

具有有效 m e t a d a t a _ u r l \mathsf{metadata\_url} metadata_url 的才 3 , 175 , 644 \mathsf{3,175,644} 3,175,644 个,怎么 i m a g e _ u r l \mathsf{image\_url} image_url 非空的都有 8 , 363 , 550 \mathsf{8,363,550} 8,363,550 个?

剩下的 3 , 860 , 607 \mathsf{3,860,607} 3,860,607 个资产没有 i m a g e _ u r l \mathsf{image\_url} image_url 字段,这意味着它们是直接托管在 OpenSea 上的(内容创作者可以选择留空 i m a g e _ u r l \mathsf{image\_url} image_url 字段,在这种情况下 OpenSea 处理托管)。

OpenSea 处理托管应该是指,将数字资产存储在 OpenSea 的集中式数据库中。

我们首先检查图像和元数据 URL 是否指向托管在 IPFS 上的资源。接着,我们检查 URL 是否仍然可以访问。为此,我们执行一个 HTTP HEAD 查询。如果查询返回的响应代码不是 200(OK),我们接下来执行一个 HTTP GET 查询。如果那个查询也返回一个非 200 的响应代码,我们将那个 URL 标记为不可访问。我们采取两步方法是为了优化性能,避免因为一些不支持 HEAD 查询的 Web 服务器而产生假阴性(false negatives)。

HTTP HEAD 用于检查网页是否更新,并不获取资源的实际内容。

此外,托管资产的服务器在测试时可能掉线,但后来又恢复在线。为了考虑这种可能性,我们在 15 天的时间内重复了上述 URL 检查三次。每次都只测试前一次尝试中被标记为不可访问的资产。只有当三次尝试都一致认为资产不可访问时,该资产才会最终被标记为不可访问。

在这里插入图片描述

上图报告了我们的发现。两个重要的观察结果是:

( i ) (\mathsf{i}) (i) 在我们数据集中的 6 月至 12 月期间,只有 3.91 \mathsf{3.91} 3.91% 托管在 IPFS 上的资产(图像)和 9.04 \mathsf{9.04} 9.04% 托管在 IPFS 上的元数据记录消失了;如预期的那样,托管在 IPFS 上的 NFT 比那些托管在非 IPFS 域名上的 NFT 更不可能消失。

( i i ) (\mathsf{ii}) (ii) 尽管 IPFS 应该更能抵抗资产消失,但大多数资产 URL( 88.71 \mathsf{88.71} 88.71%)以及元数据 URL( 80.69 \mathsf{80.69} 80.69%)都是托管在非 IPFS 域名上。查看所有丢失的 NFT,它们通过 118 , 294 \mathsf{118,294} 118,294 笔交易产生了惊人的收入,总额达到 1.60761805 \mathsf{1.60761805} 1.60761805 亿美元。不仅如此,由于我们在第 5 节中讨论的缓存问题,它们中的一部分可能仍然在流通中。正如这项分析所示,持久性是 NFT 领域的一个紧迫问题。



3 补充:缓存问题

无效缓存: 在展示正在销售的 NFT 时,OpenSea 和 Rarible 使用本地缓存层来避免重复请求获取关联的图片。如果图片被更新,或者消失了,缓存就会不同步。这可能会误导买家购买一个资产不存在,或者与 NFT 显示的资产不同的 NFT,因为他们使用了过时的缓存。

定量分析: 为了了解这个缓存问题可能的潜在影响,我们测量了在我们 OpenSea 数据集中有多少个 i m a g e _ u r l \mathsf{image\_url} image_url 无法被访问,但 OpenSea 仍然提供相应的缓存版本。

在总计 12 , 215 , 650 \mathsf{12,215,650} 12,215,650 个 NFT 中,有 3 , 945 , 231 \mathsf{3,945,231} 3,945,231 个( 32.30 \mathsf{32.30} 32.30%)代币的 i m a g e _ u r l \mathsf{image\_url} image_url 无法访问。然而,OpenSea 仍然缓存了其中 2 , 691 , 030 \mathsf{2,691,030} 2,691,030 个( 68.21 \mathsf{68.21} 68.21%)无法访问的图片,从而创造了资产仍然存在的错觉。这样一个损坏的系列是Gods Unchained,这是一个经过验证的系列,其总体交易量为 19.8 \mathsf{19.8} 19.8K 以太币。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1636415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

牛客网刷题 | BC70 计算单位阶跃函数

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 KiKi最近学习了信号…

慧言AIVoceChat实现在线客服及社区频道

原文链接:小回博客 慧言AI&VoceChat实现在线客服及社区频道 一、VoceChat 简介 官网:https://voce.chat VoceChat 是一款支持独立部署的个人云社交媒体聊天服务。15MB 的大小可部署在任何的服务器上,部署简单,很少需要维护…

VS2022 .Net6.0 无法打开窗体设计器

拿Vs2022 建了个Demo&#xff0c;运行环境是net6.0-windows&#xff0c;无论双击或是右键都打不开窗体设计器 打开项目目录下的*.csproj.user <?xml version"1.0" encoding"utf-8"?> <Project ToolsVersion"Current" xmlns"htt…

变电站综合自动化系统:Modbus-PLC-645转IEC104网关方案

前言 电力行业作为关系国计民生的重要基础产业&#xff0c;是关系千家万户的公用事业。但是要做好电力行业安全保障工作的前提&#xff0c;是需要对应的技术人员详细了解电力工业使用的系统、设备以及各类协议的安全特性&#xff0c;本文将主要介绍IEC 104协议的定义和钡铼技术…

动手学深度学习——softmax分类

1. 分类问题 回归与分类的区别&#xff1a; 回归可以用于预测多少的问题&#xff0c; 比如"预测房屋被售出价格"&#xff0c;它是个单值输出。softmax可以用来预测分类问题&#xff0c;例如"某个图片中是猫、鸡还是狗&#xff1f;"&#xff0c;这是一个多…

Springboot+Vue项目-基于Java+MySQL的入校申报审批系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

Tomact安装配置及使用(超详细)

文章目录 web相关知识概述web简介(了解)软件架构模式(掌握)BS&#xff1a;browser server 浏览器服务器CS&#xff1a;client server 客户端服务器 B/S和C/S通信模式特点(重要)web资源(理解)资源分类 URL请求路径(理解)作用介绍格式浏览器通过url访问服务器的过程 服务器(掌握)…

Python | Leetcode Python题解之第57题插入区间

题目&#xff1a; 题解&#xff1a; class Solution:def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:left, right newIntervalplaced Falseans list()for li, ri in intervals:if li > right:# 在插入区间的右侧且无交集…

ASP.NET数据存储与交换系统设计

摘 要 该系统以Microsoft Visual Studio 2003作为开发工具&#xff0c;选用SQL Server 2000数据库来实现数据存储&#xff0c;并设计开发了一种基于B/S模式的数据存储与交换系统。该系统完成了用户注册管理、后台管理和用户空间管理功能&#xff1b;为每个用户提供了个人的存…

企业家必须提升演讲口才的原因(3篇)

企业家必须提升演讲口才的原因&#xff08;3篇&#xff09; **篇&#xff1a;企业家必须提升演讲口才的原因——建立品牌影响力 一、引言 在当今竞争激烈的市场环境中&#xff0c;企业家作为企业的灵魂和代表&#xff0c;其个人形象和品牌影响力对于企业的成功至关重要。而演…

【大语言模型LLM】-基于ChatGPT搭建客服助手(1)

&#x1f525;博客主页&#xff1a;西瓜WiFi &#x1f3a5;系列专栏&#xff1a;《大语言模型》 很多非常有趣的模型&#xff0c;值得收藏&#xff0c;满足大家的收集癖&#xff01; 如果觉得有用&#xff0c;请三连&#x1f44d;⭐❤️&#xff0c;谢谢&#xff01; 长期不…

Java File类

1. File类概述 1.1 什么是File类 File是java.io包下作为文件和目录的类。File类定义了一些与平台无关的方法来操作文件&#xff0c;通过调用File类中的方法可以得到文件和目录的描述信息&#xff0c;包括名称、所在路径、读写性和长度等&#xff0c;还可以对文件和目录进行新建…

C语言 | Leetcode C语言题解之第61题旋转链表

题目&#xff1a; 题解&#xff1a; struct ListNode* rotateRight(struct ListNode* head, int k) {if (k 0 || head NULL || head->next NULL) {return head;}int n 1;struct ListNode* iter head;while (iter->next ! NULL) {iter iter->next;n;}int add n…

c#数据库: 9.删除和添加新字段/数据更新

先把原来数据表的sexy字段删除,然后重新在添加字段sexy,如果添加成功,sexy列的随机内容会更新.原数据表如下: using System; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Data.SqlClient; using System.Linq; using System.…

3D看车有哪些强大的功能?适合哪些企业使用?

3D看车是一种创新的汽车展示方式&#xff0c;它提供了许多强大的功能&#xff0c;特别适合汽车行业的企业使用。 3D看车可实现哪些功能&#xff1f; 1、细节展示&#xff1a; 51建模网提供全套汽车行业3D数字化解决方案&#xff0c;3D看车能够将汽车展示得更加栩栩如生&…

ClickHouse高原理与实践

ClickHouse高原理与实践 1 ClickHouse的特性1.1. OLAP1.2. 列式存储1.3. 表引擎1.4. 向量化执行1.5. 分区1.6. 副本与分片1.7 其他特性 2. ClickHouse模块设计2.1 Parser分析器与Interpreter解释器2.2 Storage2.3 Column与Field2.4 DataType2.4 Block2.5 Cluster与Replication …

C语言.自定义类型:结构体

自定义类型&#xff1a;结构体 1.结构体类型的声明1.1结构体回顾1.1.1结构体的声明1.1.2结构体变量的创建和初始化 1.2结构体的特殊声明1.3结构体的自引用 2.结构体内存对齐2.1对齐规则2.2为什么存在内存对齐2.3修改默认对齐数 3.结构体传参4.结构体实现位段4.1什么是位段4.2位…

【Linux系统编程】30.pthread_exit、pthread_join、pthread_cancel

目录 pthread_exit 参数retval 测试代码1 测试结果 pthread_join 参数thread 参数retvsl 返回值 测试代码2 测试结果 pthread_cancel 参数thread 返回值 测试代码3 测试结果 pthread_exit 退出当前线程。 man 3 pthread_exit 参数retval 退出值。 NULL&#xf…

我用文心4.0给你做了一个“五一旅行助手”!行程规划、实时查询、景区讲解!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

使用Gradio搭建聊天UI实现质谱AI智能问答

一、调用智谱 AI API 1、获取api_key 智谱AI开放平台网址&#xff1a; https://open.bigmodel.cn/overview 2、安装库pip install zhipuai 3、执行一下代码&#xff0c;调用质谱api进行问答 from zhipuai import ZhipuAIclient ZhipuAI(api_key"xxxxx") # 填写…