限定額度授權跟無限額度授權,實際風險差在哪裡?為什麼很多介面預設是無限?
限定額度授權(例如只授權 100 顆代幣)跟無限額度授權,兩者的差別在於攻擊者一旦濫用這份授權,能拿走的上限是多少。如果你只核准了 100 顆,就算對應合約完全淪陷,攻擊者能動用的額度也就是這 100 顆;如果核准的是無限額度,攻擊者能拿走的是你錢包裡這個代幣的全部餘額。
很多介面預設請求無限額度,主要是為了使用者體驗——如果每次交易金額不同都要重新核准一次,介面上會不斷跳出核准請求,對頻繁交易的使用者是很大的干擾。但這個設計把「使用便利」的成本,轉嫁成了「單一合約出事時的曝險上限」,使用者在核准當下,其實是可以手動把額度改成剛好夠這次交易用的數字,只是多數人不會特別去改,直接點了預設的無限選項。
如果我已經核准了無限額度,但那個協議一直運作正常、沒出過事,這份舊授權對我來說還算是風險嗎?
算,而且是一種容易被低估的風險,因為它的觸發時機不在你手上、而在對方手上。「協議一直運作正常」只代表到目前為止沒出事,不代表這份授權本身變得比較安全——只要合約程式碼本身還在鏈上、你的授權還沒撤銷,這份授權的風險狀態就完全取決於這個合約未來會不會被發現漏洞、或者合約的管理權限(如果有的話)會不會被濫用,這兩件事都不是你能控制或事先預測的。
更實際的比喻是:這比較像是你多年前把備用鑰匙留在一個朋友家,那位朋友到現在都沒出過事不代表安全無虞,只代表「目前為止還沒發生問題」——真正能讓你安心的做法,是你自己決定什麼時候把鑰匙收回來,而不是等對方家裡出事才想起這件事。
除了金額之外,撤銷授權還有其他要注意的細節嗎?例如撤銷會不會影響我正在用的協議?
有兩個常見的實務陷阱值得注意。第一,撤銷一個你其實還在主動使用的協議授權,可能導致下次交易失敗,甚至在某些質押(staking)情境下影響你對已質押部位的存取——批次撤銷雖然方便,但動手前最好先確認清單上每一項是不是你目前還在用的協議,而不是看到陌生名稱就一律點掉,有些協議名稱看起來陌生只是因為底層合約名稱跟前端顯示名稱不一致,不完全等於「沒用過」。
第二,撤銷本身也是一筆鏈上交易,如果同時要撤銷多筆授權,在以太坊主網手續費可能會迅速累加,比較划算的做法是集中處理、一次批次執行,而不是想到就撤一筆,這樣重複的手續費會比想像中更可觀。
如果我現在才第一次去查自己的授權清單,發現裡面有十幾個早就忘記的項目,該怎麼決定優先順序?
可以按照兩個維度排優先順序:一是額度大小(無限額度優先於限定額度),二是你對這個協議還有沒有印象、以及這個協議目前是否還在正常運作(已經停運或社群消失的專案,優先撤銷,因為沒人在維護的合約,風險只會隨時間增加,不會降低)。
實際做法上,先把清單裡「無限額度 + 完全不記得」的項目列成第一批,這批風險最高也最容易判斷;接著處理「無限額度 + 記得但已經不用」的項目;最後才是「限定額度」的項目,這批就算最壞情況發生,你的曝險本來就有上限,可以留到比較不急迫的時候處理。整份清單不需要一次全部清完,先處理風險最高、判斷成本最低的那批,就已經大幅降低你的曝險。
如果你用過任何去中心化交易所、鑄造過 NFT、或參與過空投,你的錢包裡很可能正躺著你自己都忘記存在的權限——這些權限叫做 token approval(代幣授權),它們一旦被核准就不會自動過期,等於是你親手發出、期限無限的提款許可。這正是為什麼很多資產被盜的受害者事後檢查才發現:私鑰從頭到尾沒被外洩,錢卻不見了。
每次你在去中心化交易所換幣、把 NFT 上架到市場、或參與 DeFi 協議,錢包都會跳出一個「核准」的請求——這個核准,是你在鏈上明確授權某個智能合約,可以在未來動用你錢包裡指定數量(甚至無限量)的某種代幣。這個設計本身是合理的:如果每次交易都要重新授權,DeFi 的使用體驗會變得極度繁瑣。問題在於,這個授權一旦核准,並不會因為你「用完這次」就自動失效——它會無限期留在鏈上,直到你自己動手撤銷。你半年前用過一次、早就忘記名字的協議,如果當初核准的是無限額度,那份授權此刻仍然有效,跟你這輩子有沒有私鑰外洩完全無關。
安全機構的統計顯示,光是 2026 年第一季,因為授權濫用(approval-based exploits)造成的損失就超過 6 億美元。這個數字反映的不是駭客技術突飛猛進,而是「舊授權」這個攻擊面本身正在被系統性利用——攻擊者不需要突破你的錢包本身,只需要找到一個你曾經核准過、而你早就忘記的合約,一旦這個合約日後被爆出漏洞或本身就是惡意設計,攻擊者就能直接動用你當初給出的授權額度,完全不需要碰你的私鑰或助記詞。
目前最廣泛被使用的工具是 Revoke.cash,支援多條主流鏈:連接錢包後,工具會列出目前所有還在生效中的授權,包含授權對象(哪個合約)、授權額度(是限定數量還是無限)、以及授權建立的時間。使用者可以逐一檢視、針對看起來陌生或已經不再使用的協議按下撤銷,撤銷本身是一筆正常的鏈上交易,需要支付對應網路的手續費,在以太坊主網手續費可能偏高,在 Layer 2 或其他鏈上通常只要幾分錢。如果你主要用 MetaMask,錢包本身內建的 Portfolio 頁面也有授權管理功能,不需要額外安裝其他工具;Solana 生態則因為權限機制跟以太坊系(ERC-20 額度式)不同,採用的是委任(delegate)機制,需要用專門支援 Solana 的撤銷工具處理。
正因為授權管理工具已經變成使用者主動尋求資安協助時的入口,這些工具本身也成為釣魚網站最愛冒充的對象——攻擊者複製 Revoke.cash 的介面與網域拼法,等使用者連接錢包後,反過來誘導使用者「核准」一筆偽裝成撤銷動作的惡意交易。辨別的關鍵原則很簡單:真正的撤銷動作,錢包彈出的交易內容欄位會顯示這是一筆「將額度歸零」的操作;如果彈出的交易要求你「核准」一個新的、看不懂的合約地址,這已經不是撤銷,而是另一次授權釣魚。使用前務必手動輸入官方網址,不要依賴搜尋結果或訊息裡的連結。
把定期檢查授權,當成跟定期更新密碼一樣的例行動作——建議每個月抽時間用你信任、已確認過官方網址的工具,掃過一次錢包裡目前開放的所有授權,撤銷任何你不記得授權過、或早已不再使用的項目。這個習慣不需要等到出事才做:多數授權濫用事件之所以造成損失,是因為受害者根本不知道自己身上還背著一份份「有效期限:無限」的舊許可,直到某天協議出事、或攻擊者主動找上這份授權,才發現問題早在幾個月甚至幾年前就已經埋下。