智能合約中未授權訪問

未授權訪問:

如果智能合約對關鍵函數的訪問控制不足,攻擊者可能執行不應允許的操作,如修改合約狀態或提取資金。

未授權訪問示例

假設我們有一個智能合約,用于管理用戶的存款和提款。在這個例子中,合約沒有正確地限制誰可以調用withdraw函數。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract SimpleBank {mapping(address => uint256) public balances;function deposit() public payable {balances[msg.sender] += msg.value;}// 缺乏訪問控制,任何人都可以調用這個函數function withdraw(uint256 amount) public {require(balances[msg.sender] >= amount, "Insufficient balance");payable(msg.sender).transfer(amount);balances[msg.sender] -= amount;}
}

在這個合約中,withdraw函數可以直接被任何地址調用,只要該地址有足夠余額即可。但是,如果合約中存在一些邏輯錯誤或者狀態混亂,這可能導致資金被非法提取。

攻擊者行為

攻擊者可以通過調用withdraw函數,即使他們沒有足夠的余額,也可能因為某些合約狀態的錯誤而成功提取資金。比如,如果合約中的某個地方錯誤地增加了攻擊者的余額,攻擊者就可以利用這一點來提取不屬于他們的資金。

解決方案

為了解決未授權訪問的問題,我們需要在函數前添加訪問修飾符,確保只有特定的角色或地址可以調用withdraw函數。這里我們使用一個簡單的onlyOwner修飾符來限制對合約所有者的調用。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract SecureBank {address private owner;mapping(address => uint256) public balances;constructor() {owner = msg.sender;}modifier onlyOwner() {require(msg.sender == owner, "Only the contract owner can call this function");_;}function deposit() public payable {balances[msg.sender] += msg.value;}// 使用onlyOwner修飾符限制對所有者的調用function withdraw(uint256 amount) public onlyOwner {require(balances[msg.sender] >= amount, "Insufficient balance");payable(msg.sender).transfer(amount);balances[msg.sender] -= amount;}
}

現在,只有合約的創建者(即owner)可以調用withdraw函數。這防止了未授權的用戶直接提取資金,提高了合約的安全性。
注意,這種簡單的訪問控制機制可能不足以應對復雜的場景,你可能需要更復雜的角色和權限系統,比如使用OpenZeppelinOwnableAccessControl庫來提供更細粒度的訪問控制。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/24259.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/24259.shtml
英文地址,請注明出處:http://en.pswp.cn/web/24259.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python使用appium打開程序后,為什么沒有操作后程序就自動退出了

當使用Appium打開應用程序并在沒有執行任何操作后它自動退出,這可能是由于幾個不同的原因。以下是一些可能的原因和相應的解決方案: 應用程序的默認行為: 有些應用程序在啟動后如果沒有用戶交互,可能會因為超時或其他邏輯而自動關…

BGP匯總+認證

一、BGP 的宣告問題 1、在 BGP 協議中每臺運行 BGP 的設備上,宣告本地直連路由 2、在 BGP 協議中運行 BGP 協議的設備來宣告.通過 IGP 學習到的,未運行 BGP 協議設備產2、生的路由; 在 BGP 協議中宣告本地路由表中路由條目時,將攜帶本地到達這…

Spring Boot集成geodesy實現距離計算

1.什么是geodesy? 浩瀚的宇宙中,地球是我們賴以生存的家園。自古以來,人類一直對星球上的位置和彼此的距離著迷。無論是航海探險、貿易往來還是科學研究,精確計算兩個地點之間的距離都是至關重要的。 Geodesy:大地測量…

Qt實現麥克風音頻輸入保存wav文件

一.本文目的 實現在Qt中接收麥克風數據并保存為WAV文件,使用QAudioInput來錄音,并使用QFile來保存數據到WAV文件。 開發環境:QT5.12 本文用極簡代碼實現,核心代碼只需不到100行。 完整工程代碼文末鏈接可以直接下載。 二.代碼實…

51單片機STC89C52RC——創建Keil項目

一,打開Keil5 菜單---project--New uVision Project... 二,新建項目文件夾 彈出選擇文件夾對話框后,可以右鍵新建一個項目文件夾【文件夾名字可以隨便取,自己看得懂就行,建議不要有特殊字符】,這樣該項目…

MATLAB算法實戰應用案例精講-【數模應用】因子分析(附MATLAB和python代碼實現)

目錄 前言 算法原理 SPSS因子分析 操作步驟 結果分析 SPSSAU 因子分析案例 1、背景 2、理論 3、操作 4、SPSSAU輸出結果 5、文字分析 6、剖析 疑難解惑 同源方差或共同方法變異偏差,Harman單因子檢驗? 提示出現奇異矩陣? 因子得分和綜合得分? 因子分析計…

品牌策劃:不只是工作,是一場創意與學習的旅程

你是否認為只有那些經驗豐富、手握無數成功案例的高手才能在品牌策劃界嶄露頭角? 今天,我要悄悄告訴你一個行業內的秘密:在品牌策劃的世界里,經驗雖重要,但絕非唯一。 1?、無止境的學習欲望 品牌策劃,這…

rtl8723DU移植 android4.4 4418 (第二部分藍牙部分)

使用的代碼: HMI (8723bu)源碼 567_RTL8723DU_WiFi_linux_v5.6.5.3_35502_COEX20181130-2e2e.20191025.zip 由于之前寫的所有筆記沒有保存,這里只能是部分。 0、 前置知識 1 、kernel 的移植 2、hardwire的移植 將 驅動中的 h…

流水線報錯:[Error: ENOENT: no such file or directory, stat ‘/application/bin‘]

報錯信息: #18 10.37 > Build error occurred #18 10.38 [Error: ENOENT: no such file or directory, stat /application/bin] { #18 10.38 errno: -2, #18 10.38 code: ENOENT, #18 10.38 syscall: stat, #18 10.38 path: /application/bin #18 10.38 } #18 12…

騰訊開源人像照片生成視頻模型V-Express

網址 https://github.com/tencent-ailab/V-Express 下面是github里的翻譯: 在人像視頻生成領域,使用單張圖像生成人像視頻變得越來越普遍。一種常見的方法是利用生成模型來增強受控發電的適配器。 但是,控制信號的強度可能會有所不同&…

系統思考—啤酒游戲沙盤

10個智商120的?組人?成?團的?隊,大?的家?集體智?是商?多少? 在?期長?輔?各導?種?業企?的?程過?中,我?經們?常?察觀?到,雖?每然?個?門部?都?力努?解決?己自?的問題,但?司公?整體的?收應…

Rust 標記一個屬性或函數為廢棄

如題,演示Rust 標記一個屬性或函數為廢棄的基本使用方法: 示例: use serde::{Deserialize, Serialize};#[derive(Clone, Debug, Serialize, Deserialize, Default)] pub struct GrpcOptions {pub addr: String,pub max_recv_message_size: u…

conntrack如何限制您的k8s網關

1.1 conntrack 介紹 對于那些不熟悉的人來說,conntrack簡單來說是Linux內核的一個子系統,它跟蹤所有進入、出去或通過系統的網絡連接,允許它監控和管理每個連接的狀態,這對于諸如NAT(網絡地址轉換)、防火墻和保持會話連續性等任務至關重要。它作為Netfilter的一部分運行,…

解決福昕風騰PDF套裝無法打印在線電子簽章的方法

使用福昕風騰PDF套裝打印在線電子簽章文件時發現,在線蓋的電子印章和簽名卻打印不出來,后現發現,按圖中選項選擇“文檔”,即可完整打印文件內容及電子簽章。留印。

(求一個整數各位數的和)編寫程序,讀取一個在0和1000之間的整數,并將該整數的各位數字相加。例如:整數是 932,各位數字之和為14。

(求一個整數各位數的和)編寫程序,讀取一個在0和1000之間的整數,并將該整數 的各位數字相加。例如:整數是 932,各位數字之和為14。 提示:利用操作符%分解數字,然后使用操作符/去掉分解出來的數字。例如: 932%10-2 932/10-93。下面是一個運行示…

nginx-變量

變量也是nginx的一大亮點,這也使得nginx更加靈活了,變量的語法格式為 $XXX 或 ${xxxx} 首先說下變量的分類,變量分為內置和自定義,網絡不少對變量的描述都不太準確,他們認為但凡不是nginx原生的變量都是屬于自定義&am…

iOS中常用的一些宏以及用法

目錄 1.NS_UNAVAILABLE 2.__kindof 前言 這里博客主要介紹iOS中常用的一些宏以及用法。 1.NS_UNAVAILABLE NS_UNAVAILABLE是一個宏,通常用于指示某個方法不可用,無法被調用。 當一個方法被標記為NS_UNAVAILABLE時&…

【uniapp】帶圓角漸變邊框實現

1. 效果圖 2. 代碼實現 <image class"item-left-img" :src"url" mode"aspectFill" />.item-left-img {width: 240rpx;height: 320rpx;border: 6rpx solid transparent;background-clip: padding-box, border-box;background-origin: padd…

校驗參數個數工具類

項目中有個需求&#xff1a;前后端參數一致性校驗&#xff0c;在某業務場景下后端代碼需要校驗參數個數&#xff0c;因此設計了1個工具類方便大伙使用&#xff0c;特此簡單記錄下。 校驗參數個數工具類 一、校驗工具類CheckNumInsideParamters二、單元測試ParameterSizeTest三…

數據挖掘--挖掘頻繁模式、關聯和相關性:基本概念和方法

頻繁項集、閉項集和關聯規則 頻繁項集&#xff1a;出現的次數超過最小支持度計數閾值 閉頻繁項集&#xff1a;一個集合他的超集(包含這個集合的集合)在數據庫里面的數量和這個集合在這個數據庫里面的數量不一樣,這個集合就是閉項集 如果這個集合還是頻繁的,那么他就是極大頻…