Solidity智能合约漏洞类型与解题思路指南

一、常见漏洞类型与通俗解释

1. 重入攻击(Reentrancy) 🌀

通俗解释:就像你去银行取钱,柜台人员先给你钱,然后再记账。你拿到钱后立即又要求取钱,由于账还没记,柜台又给你一次钱,这样循环下去你就能拿走银行所有的钱。

漏洞原理:合约在更新状态前调用外部合约,允许攻击者递归调用提款函数

典型代码

Solidity
function withdraw() public {uint bal = balances[msg.sender];require(bal > 0);(bool sent, ) = msg.sender.call{value: bal}(""); // 漏洞点:先转账后更新余额require(sent, "Failed to send Ether");balances[msg.sender] = 0;
}

2. 整数溢出/下溢(Integer Overflow/Underflow) 🔢

通俗解释:就像汽车里程表,当超过最大值时会从零重新开始。如果你有0元,再花1元,余额会变成非常大的数字。

漏洞原理:算术运算结果超出变量范围导致意外行为

典型代码

Solidity
uint8 public balance = 255;
balance += 1; // 溢出后balance变为0

3. 访问控制缺陷(Access Control) 🔓

通俗解释:就像你家门锁坏了,任何人都能进来拿东西。智能合约中如果没有权限检查,任何人都能调用关键函数。

漏洞原理:敏感函数缺乏适当的权限检查

典型代码

Solidity
function transferOwnership(address _newOwner) public {owner = _newOwner;// 没有检查msg.sender是否是当前owner
}

4. 时间戳依赖(Timestamp Dependency) ⏰

通俗解释:就像用不准确的闹钟来决定发工资时间,矿工可以稍微调整时间让你提前或延后拿到工资。

漏洞原理

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

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

相关文章

Docker部署.NetCore8项目

在VS.net新建.netCore8项目,生成项目的发布文件,之后添加Dockerfile,内容如下: FROM mcr.microsoft.com/dotnet/aspnet:8.0 # 设置工作目录 WORKDIR /app # 挂载临时卷(类似于 VOLUME /tmp) VOLUME /tmp …

【C++】右值引用、移动语义与完美转发

左值、右值是C常见的概念,那么什么是右值引用,移动语义,完美转发呢?本UP带大家了解一下C校招常问的C11新特性。 左值与右值 左值:明确存储未知、可以取地址的表达式 右值:临时的、即将被销毁的&#xff…

艾尔登法环地图不能使用鼠标移动或点击传送点原因和设置方法

今天玩艾尔登法环突发发现地图不能用鼠标点击传送点了。 找了半天发现设置地图选单的游标移动方式只有键盘了,改成键盘与鼠标就好啦。

【算法】——一键解决动态规划

前言 动态规划是一种高效解决​​重叠子问题​​和​​最优子结构​​问题的算法思想。它通过​​分治记忆化​​,将复杂问题分解为子问题,并存储中间结果,避免重复计算,从而大幅提升效率。 ​​为什么重要?​ ​​优化…

uniApp开发微信小程序-连接蓝牙连接打印机上岸!

历经波折三次成功上岸! 三次经历简单絮叨一下:使用uniAppvue开发的微信小程序,使用蓝牙连接打印机,蓝牙所有的接口都是插件中封装的,用的插件市场中的这个: dothan-lpapi-ble ;所以&#xff0c…

软件系统安全设计方案,信息化安全建设方案(Word原件)

1.1 总体设计 1.1.1 设计原则 1.2 物理层安全 1.2.1 机房建设安全 1.2.2 电气安全特性 1.2.3 设备安全 1.2.4 介质安全措施 1.3 网络层安全 1.3.1 网络结构安全 1.3.2 划分子网络 1.3.3 异常流量管理 1.3.4 网络安全审计 1.3.5 网络访问控制 1.3.6 完…

wsl2+ubuntu22.04安装blenderproc教程

本章教程,介绍如何在windows操作系统上通过wsl2+Ubuntu22.04上安装blenderproc。 一、pipi安装方式 推荐使用minconda3安装Python环境。 pip install Blenderproc二、源码安装 1、下载源码 git clone https://github.com/DLR-RM/BlenderProc2、安装依赖 cd BlenderProc &am…

Blender 转 STL 文件全攻略:从基础到进阶

在 3D 建模与打印领域,Blender 凭借其强大的功能和开源特性,深受创作者喜爱。而 STL 文件格式,作为 3D 打印行业的通用标准,能被绝大多数 3D 打印软件和设备所识别。因此,将 Blender 模型转换为 STL 文件,是…

Ansys Electronics 变压器 ACT

你好, 在本博客中,我将讨论如何使用 Ansys 电子变压器 ACT 自动快速地设计电力电子电感器或变压器。我将逐步介绍设计和创建电力电子变压器示例的步骤,该变压器为同心组件,双绕组,采用正弦电压激励,并应用…

nacos配置达梦数据库驱动源代码步骤

1.在父工程pom.xml添加依赖&#xff1a; <dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version>8.1.1.193</version> </dependency> 2.在nacos-config模块pom.xml添加依赖&#xff1…

4.9-4.10学习总结 Stream流练习+方法引用+异常

Stream流练习&#xff1a; 1.打印数组内的偶数。 import java.util.*; import java.util.function.BiConsumer; public class test {public static void main(String[] args) {ArrayList<Integer> listnew ArrayList<>();Collections.addAll(list,1,2,3,4,5,6,7,…

FPGA系统开发板调试过程不同芯片的移植步骤介绍

目录 1.我目前使用的开发板 2.不同开发板的移植 步骤一&#xff1a;芯片型号设置 步骤二&#xff1a;约束修改 步骤三、IP核更新 关于FPGA系统开发板调试过程中不同芯片的移植。我需要先理清楚FPGA开发中移植到不同芯片的一般流程。首先&#xff0c;移植通常涉及到更换FPG…

复现QGIS-MCP教程

由于Claude国内下载不了尝试使用Cursor 下载安装Cursor Cursor - The AI Code Editor 本示例安装的是0.46版本 UV安装 简介 安装 安装成功 配置环境变量 验证 下载代码 git clone gitgithub.com:jjsantos01/qgis_mcp.git QGIS插件安装 文件拷贝 您需要将 qgis_mcp_plu…

java笔记03

基本数据类型 数据值是存储在自己的空间中。 特点&#xff1a;赋值给其他变量&#xff0c;也是赋的真实的值。 引用数据类型 数据值是存储在其他空间中&#xff0c;自己空间中存储的是地址值。 特点&#xff1a;赋值给其他变量&#xff0c;赋的地址值。 综合练习 使用 ctrl…

【开发工具】快速自定义图标元素的颜色

如果你想要一个轻量级、简单易用 的小工具来快速自定义图标元素的颜色&#xff08;比如调整 SVG/PNG 图标的颜色&#xff0c;或者生成多色图标&#xff09;&#xff0c;可以试试以下工具&#xff1a; 1. 在线工具&#xff08;无需安装&#xff09; SVG/PNG 图标改色 - Recol…

【CompletableFuture】异步编程

CompletableFuture异步编程 CompletableFuture介绍与传统 Future 的对比使用方法1. 使用 supplyAsync&#xff08;有返回值&#xff09;使用 runAsync&#xff08;无返回值&#xff09;指定自定义线程池 处理异步结果1. thenApply&#xff1a;转换结果2.thenAccept&#xff1a;…

【TS学习】(23)理解类的双重角色

在 TypeScript 中&#xff0c;类&#xff08;class&#xff09;不仅是一个运行时的值&#xff08;即可以实例化对象的构造函数&#xff09;&#xff0c;同时也是一个类型声明。具体来说&#xff0c;类在 TypeScript 中既声明了值&#xff0c;也声明了类型&#xff0c;并且它的类…

IAP Firmware Upload Tools.exe IAP 网络固件升级教程

IAP是In Application Programming的简写&#xff0c;IAP升级可以被视为固件升级的一种形式,它是一种在应用程序运行过程中对固件进行更新的技术手段。允许MCU在运行过程中对MCU User Flash的部分区域进行烧写,目的是为了代替编程器对MCU烧录的依赖。 主程序UI 软件按钮说明&a…

Uniapp当中的async/await的作用

一、原始代码的行为&#xff08;使用 async/await&#xff09; const getUserMessagePlan async () > {// 等待两个异步操作完成const tabsList await message.getTagesList(); // 等待获取标签列表const tagsStateList await message.getTagsStateList(); // 等…

设计模式 Day 5:夯实观察者模式(Boost 实战精讲)

今天我们继续深入观察者模式的学习&#xff0c;不再局限于手写的抽象结构&#xff0c;而是聚焦于真实项目中如何使用成熟框架&#xff08;如 Boost.Signals2&#xff09;高效落地观察者模式。 本篇采用**“理论解析 问答讲解 实战用例”**结构&#xff0c;帮助你从设计思想到…