代幣授權是一種智能合約權限,允許去中心化應用程式(即 dapp)存取並移動錢包中特定類型的代幣。若未取得授權,任何應用程式都無法觸碰自託管錢包中的代幣,即使錢包已連接至該應用程式的介面亦然。授權正是連接錢包與實際允許協議使用其中資產之間的橋樑。
代幣授權幾乎是每一項 DeFi 操作的必要條件:在去中心化交易所兌換代幣、存入借貸協議、向流動性池注入流動性,或在市場上架 NFT。然而,這也是加密貨幣安全領域中最常遭到利用的機制之一。MetaMask 的每月加密貨幣安全報告詳細追蹤了這些威脅。例如,2026 年 2 月加密貨幣安全報告記錄了「簽名釣魚」攻擊(即授權釣魚)上升 207% 的情況。對於任何使用自託管錢包的人而言,了解代幣授權的功能、持續性,以及攻擊者如何加以利用,都是不可或缺的知識。
免責聲明:本內容僅供教育目的,不構成財務建議,亦非招攬行為,且不適用於英國受眾。加密貨幣錢包與數位資產具有風險,並不適合所有用戶。
代幣授權的運作方式
以下是代幣授權的常見範例:在去中心化交易所將 USDC 兌換為 ETH。應用程式的智能合約需要取得從錢包提取 USDC 並執行交易的權限,而這個權限就是代幣授權。
在合約層面,用戶會在 USDC 代幣合約上呼叫名為 approve() 的函數。此函數接受兩個輸入:spender(被授權的智能合約地址)和 amount(spender 被允許移動的代幣數量)。一旦授權交易在區塊鏈上確認,spender 合約便可呼叫 transferFrom(),在無需用戶進一步確認的情況下,從用戶錢包中移動最多已授權數量的該代幣。
關於代幣授權,有兩個重要細節是每個人——尤其是初學者——都應該了解的。首先,授權僅針對特定代幣和特定 spender。授權去中心化交易所(DEX)使用 USDC,並不代表它能存取 ETH、BTC 或任何其他代幣。其次,授權是一筆需要支付網路費用的區塊鏈交易——它是獨立於實際兌換的步驟,這也是為什麼 DeFi 操作通常需要兩次確認:一次用於授權,一次用於執行。
有限授權與無限授權
授權中的數量欄位決定了 spender 可以存取多少代幣。
有限授權僅授權 spender 移動特定數量的代幣——例如,某次兌換所需的恰好 500 USDC。一旦這 500 USDC 被轉移,額度即告用盡。下一次兌換將需要新的授權,這意味著又一筆區塊鏈交易和網路費用。
無限授權則授權 spender 移動該代幣的最大可能數量(技術上為 2^256 − 1,遠超任何代幣的總供應量)。這意味著合約可以存取用戶該代幣的全部餘額,無論現在還是未來,永遠無需再次授權。大多數應用程式預設要求無限授權,因為這能降低用戶的操作摩擦——只需一次授權,未來所有涉及該代幣的交易便已預先獲得授權。
這種便利性確實存在,但風險同樣不容忽視。無限授權永不過期。若被授權的合約日後遭到利用、被惡意升級,或用戶是在仿冒合法應用程式的釣魚網站上簽署了授權,攻擊者便可在無需用戶任何進一步操作的情況下,清空授權所涵蓋的所有代幣。受害者甚至可能在代幣消失之前都不知道該授權的存在。
考量因素 | 有限代幣授權 | 無限代幣授權 |
授權數量 | 特定數量(例如 500 USDC) | 最大可能數量(全部餘額,無限期) |
持續性 | 指定數量轉移後即告失效 | 持續有效,直至手動撤銷 |
用戶操作摩擦 | 每筆交易需新授權(額外網路費用) | 一次授權涵蓋所有未來交易 |
合約遭利用時的風險 | 損失上限為已授權數量 | 全部代幣餘額面臨風險 |
常見使用情境 | 注重安全的用戶、高價值交易 | 大多數應用程式的預設設定 |
Permit2 代幣授權的運作方式
2022 年 11 月,Uniswap Labs 部署了一個名為 Permit2 的合約,以解決傳統代幣授權的操作摩擦與風險問題。到 2025 年,超過 310 萬個以太坊主網地址已授權 Permit2 合約,它已成為 DeFi 中整合最廣泛的授權系統,被 Uniswap、1inch、CowSwap 及許多其他協議所採用。
其核心概念是:用戶無需向每個應用程式的智能合約分別授予區塊鏈授權,而是向 Permit2 合約授予單一授權。此後,每次個別應用程式的互動均透過鏈下簽名進行授權——這是一個在錢包中簽署的訊息,指定了哪些代幣、數量多少、哪個 spender,以及權限到期的截止時間。
相較於舊版授權,Permit2 的改進意義重大。Permit2 簽名包含截止時間,因此過期的權限會自動失效,而非永久存在。Nonce 機制防止同一簽名被使用兩次。用戶每個代幣只需簽署一次授權,而非每個應用程式各簽一次,從而減少了區塊鏈授權交易的總數及相關網路費用。
然而,這也帶來了攻擊面的轉移。舊版授權是透過休眠的區塊鏈權限遭到利用——那些數月或數年前已獲授權、後來被攻破的合約。Permit2 簽名則是在簽署當下透過釣魚攻擊遭到利用。由於 Permit2 授權使用 EIP-712 類型資料簽名,它們在錢包中以簽名提示而非交易確認的形式呈現。惡意網站可能呈現一個看似例行的「簽署此訊息」請求,實際上卻是一個授權轉移用戶全部代幣餘額的 Permit2 簽名。無需區塊鏈交易,用戶也無需支付網路費用,只需一個簽名,攻擊者便可呼叫 transferFrom()。
惡意程式如何利用代幣授權
錢包清空程式是自動化的釣魚工具包,專門設計用於從受害者處提取代幣授權——包括舊版授權和 Permit2 授權。它們以**惡意程式即服務(DaaS)**的模式運作:開發者維護惡意智能合約、釣魚基礎設施和資金洗錢管道,附屬成員則以分享被盜資金的方式租用該服務(通常保留所竊取資金的 75–95%)。
錢包清空程式的攻擊模式通常遵循一致的流程:
第一步:誘騙。 受害者透過贊助搜尋結果、虛假空投連結、遭入侵的 Discord 伺服器或仿冒應用程式介面進入釣魚網站。該網站看起來與合法協議一模一樣:相同的品牌形象、相同的版面配置,通常還有幾乎一致的網址。
第二步:請求簽名。 網站提示錢包簽署一筆交易或 Permit2 簽名。該提示可能看起來像標準的應用程式連接、代幣兌換或空投領取。但實際上,該簽名授權了清空程式的合約移動受害者的代幣。
第三步:清空。 攻擊者從另一個錢包呼叫 transferFrom(),提取已授權的代幣。複雜的清空程式工具包會將多個代幣轉移——ERC-20、NFT 和 Permit2 授權——批次打包成單一的 multicall,在數秒內清空錢包。資金隨後透過去中心化交易所和跨鏈橋進行路由,以掩蓋資金流向。
關鍵細節在於:從區塊鏈的角度來看,每個步驟都是有效且經過授權的交易。受害者簽署了授權,合約執行了被授權的操作,協議層面沒有任何機制可以撤銷。
部分錢包現在會在用戶確認前模擬交易和簽名,標記已知的清空程式合約和可疑的授權數量。MetaMask 透過與 Blockaid 的整合實現了這一功能。這並不能完全消除風險——新型清空程式合約可能尚未被任何偵測資料庫收錄——但它在釣魚提示與用戶確認之間增加了一道防護。
如何查看和撤銷代幣授權
撤銷代幣授權意味著將特定 spender 的額度歸零。這是一筆區塊鏈交易,需要支付網路費用並在錢包中確認,但它會永久移除該合約移動指定代幣的能力。
有三個概念值得注意:
何時撤銷。 在使用完某個應用程式且不打算再次使用之後。在授予不再需要的無限授權之後。在任何感覺可疑的互動之後——即使當下沒有立即損失。作為例行做法:定期審查有效授權,可以發現那些已超出其用途的權限。
撤銷的費用。 每次撤銷都是一筆獨立的區塊鏈交易,需要支付各自的網路費用。在以太坊主網上,這通常需要幾美元;在二層網路上,費用可能只有幾分錢。相較於遭入侵授權可能造成的損失,這筆費用微不足道,但若數月的 DeFi 活動累積了數十個授權,費用也會逐漸增加。
撤銷無法解決的問題。 撤銷授權可防止未來在該權限下發生的轉移,但無法撤銷已發生的轉移。若清空程式已呼叫 transferFrom(),代幣便已消失。撤銷是預防性措施,而非補救措施。
如需在自託管錢包中查看和撤銷授權的逐步說明,請參閱 MetaMask 的如何撤銷智能合約授權。
如何降低代幣授權風險
以下幾項做法可在不犧牲 DeFi 互動便利性的前提下降低風險敞口。
在有選項的情況下設定有限授權。 例如,MetaMask 擴充功能會顯示請求的授權數量,並允許用戶在確認前自訂消費上限。將上限設定為交易實際所需的數量,可在合約日後遭到入侵時將損失降至最低。
仔細閱讀簽名提示。 Permit2 簽名會顯示代幣名稱、數量、spender 地址和截止時間。若「簽署訊息」提示顯示代幣詳情,這不是登入操作——而是一項授權。若數量與用戶的全部餘額相符,而非預期的交易金額,這就是一個警示訊號。
連接前先驗證網站。 清空程式網站會複製合法應用程式的介面。將可信網址加入書籤並從書籤導航——而非從搜尋結果、社群媒體連結或私訊——可消除最常見的誘騙途徑。
定期審查授權。 有效授權會在數月的 DeFi 使用過程中不斷累積。每季使用區塊鏈瀏覽器的授權檢查工具或消費上限儀表板進行一次審查,可發現那些已不再有用途的權限。
關於代幣授權的常見問題
不會。連接錢包只會分享公開地址,並允許應用程式讀取代幣餘額,並不會授權應用程式移動任何代幣。代幣授權需要另外發起一筆獨立的區塊鏈交易(適用於傳統授權方式),或簽署一則 Permit2 訊息——這兩種方式都會在錢包中顯示明確的提示,需要使用者手動確認。
不。ERC-20 的 approve() 函數和 Permit2 僅適用於代幣,不適用於區塊鏈的原生貨幣。ETH(以及其他原生貨幣,如 MATIC 或 BNB)只能透過簽署直接轉帳交易來移動。但是,原生貨幣的封裝版本(WETH、WMATIC)屬於 ERC-20 代幣,可能會透過授權操作被清空。
Permit2 解決了傳統授權最大的弱點——永久存在的閒置無限授權——方法是加入截止日期與 nonce。但它也帶來了另一種風險:看似無害的鏈下簽名,卻可能授權大額轉帳。兩種系統都稱不上絕對安全。Permit2 在防範過期授權漏洞方面更具優勢;而傳統授權在防範簽名釣魚攻擊方面則更為安全,因為它需要一筆區塊鏈交易,而錢包會以更顯眼的方式呈現這類操作。
無限代幣授權允許智能合約從錢包中移動特定代幣的任意數量,且無到期限制。大多數應用程式預設要求無限授權,以減少所需的交易次數。風險在於:若已授權的合約遭到入侵,攻擊者無需任何進一步確認,即可清空錢包中該代幣的全部餘額。無限授權將持續有效,直到使用者手動撤銷為止。