量化喵是独立第三方信息站,与任何交易所都没有隶属关系。本页不含推广链接与邀请码。 完整披露 →

安全 · 权限设计

API 密钥泄露会发生什么:权限设计与最小授权

说到 API 密钥泄露,你第一个想到的可能是「币被提走了」。但还有一种情况更容易被忽视:提现权限没开,对方把币提不到链上,却能用你的余额去做对他有利的交易,也能在你自己的账户之间把钱搬来搬去。等你发现的时候,钱还在账户里,只是变少了。

下面先讲三类权限各自放出去什么、密钥泄露后对方能做和做不了的事、IP 白名单挡的是哪一段,再给一份建 Key 前后逐项核对的清单,以及发现泄露后的处置顺序。

三类权限,先分清楚

不同平台的叫法略有差别,但创建 API 密钥时的权限基本都能归成三类,危险程度从低到高:

权限能做什么泄露之后意味着
只读查行情、查余额、查历史订单信息暴露,资金动不了
交易下单、撤单、开仓平仓;按欧易文档,还包括资金账户↔交易账户划转、母子账户之间划转,以及一部分账户设置币提不到链上,但能被交易掉,也能在你自己的账户之间被搬来搬去
链上提现把资产提到链上地址(单独的 Withdraw 权限,不含在交易权限里)基本等于丢币

提现权限几乎永远不该开。理由很直接:自动化交易根本不需要它。策略脚本要做的是买和卖,不是把币搬走。你可能会想「万一我要写个自动归集的脚本呢」,那也建议手动做。一把带提现权限的密钥一旦泄露,几乎没有补救窗口,对方一条请求就能把资产转到自己的地址,链上转账不可撤销。省下的那几步手工操作,换不来这个风险。

还有一点值得提醒:有些平台的提现权限要配合提币地址白名单才真正生效,规则各家不同。但「加了地址白名单就安全」是个危险的简化:白名单本身也是账户设置,能不能被改、改完要不要等冷静期,取决于平台。真正稳的做法还是不开。

你的脚本是怎么拿着密钥去下单的

要理解密钥的风险,得先弄清楚它到底被谁用、以什么方式用。

你的策略跑在自己的电脑或一台服务器上,它不会「登录」交易平台,而是通过 HTTP 接口发请求。每条请求里带着 apiKey 和一段用密钥算出来的签名,平台收到后验证签名,确认「这是那把 Key 的持有者发来的」,然后照做。整个过程没有人工确认、没有短信验证、没有二次弹窗,密钥就是身份本身。

CCXT 官方文档首页截图:左侧是几行 TypeScript 调用示例,右侧是统一格式的行情返回结构,下方排列着它支持的交易所标签
CCXT 官方文档首页,2026-09 截图。一套统一接口连接上百家交易所,策略脚本就是通过这样的库拿着 API 密钥去下单的。

不自己写签名的话,一般是用现成的库(比如上图那类统一接口库),把密钥填进配置,剩下的交给库处理。这样方便,但也意味着:你的密钥会以明文形式出现在某个配置文件、环境变量或代码里,这正是它泄露的起点。

泄露之后,对方能做什么、不能做什么

假设你的密钥只开了只读和交易、没开提现,现在它落到了别人手里。

对方做不到的事其实只有两件:把币提到链上的某个地址(那要单独的提现权限),以及登录你的网页端(那要登录凭证)。所以第一时间不必假设「币已经被提走了」。

但「做不到的」比你可能以为的要短。欧易 API 文档对交易权限的说明是「可以下单和撤单,转账,调整配置 等写权限」。也就是说,资金账户和交易账户之间划转、母账户与子账户之间划转、一部分账户设置,交易权限就能做。「只开交易没开提现,所以对方连划转都动不了」这个说法并不成立。钱仍然出不了你的账户体系,但它会在你的账户之间被搬动,而这恰恰是攻击者把资金集中到某个可交易账户里、再拿去做对他有利的成交的前一步。

对方能做的,才是真正麻烦的部分:

  • 用你的余额去砸盘或拉盘。攻击者在一个流动性很差的交易对上提前挂好自己的单,然后用你的账户市价对着打,你的钱以极差的价格成交,差价进了他的口袋。资金没有离开你的账户,但价值转移已经完成。这种玩法容易被忽视,也是「只开交易权限就安全」这个说法最大的漏洞。
  • 反复交易磨手续费。不需要多精巧,持续对敲就能一点点消耗你的余额。
  • 动你正在跑的仓位。撤掉你的挂单、平掉你的持仓,或者在合约上给你开一个方向相反的大仓。
  • 在你自己的账户之间划转。资金账户和交易账户之间搬、母账户和子账户之间搬。币没离开你的名下,但你原本用来隔离风险的那层子账户分仓,会被一次划转抹平。
  • 改掉一部分账户设置。比如账户模式、杠杆这类跟着接口走的设置项,具体哪些能改以平台文档为准。

换句话说:没有提现权限,资产不会被搬到链上,但它可以被交易成更少的钱,也可以被划到你没想到的那个账户里。所以权限最小化必须和下面这道锁配合着用。

IP 白名单:性价比最高的一道锁

建 Key 时就给密钥绑 IP 白名单。

它的逻辑很简单:密钥只在来自指定 IP 的请求里才有效。泄露了也用不了,对方从自己的机器上调用会被直接拒绝。这道锁不依赖你记不记得改密码、不依赖你能不能及时发现异常,它是结构性的,而不是靠人自觉的。

成本也低。脚本跑在一台固定 IP 的服务器上(哪怕是最便宜的那种),配一次就完事。跑在家里宽带上、IP 会变的人会觉得麻烦,这也是把策略挪到固定 IP 机器上跑的一个理由,不只是为了不断电。

还有一条容易被忽略的规则:按欧易官方文档,没有绑定 IP、又带交易或提现权限的密钥,闲置 14 天后会被自动删除。所以不绑 IP 的密钥除了风险更大,还可能哪天被删掉,让你的脚本莫名其妙地连不上。另外,每把密钥最多能绑 20 个 IP(支持 IPv4/IPv6 和网段),要给出口可能变化的场景留点余量并不难。

但要清楚它挡不住什么:白名单防的是「别人拿你的密钥从别处调用」,防不住「你自己那台机器被入侵」。机器一旦被控制,请求就是从白名单里的 IP 发出的,这道锁形同虚设。所以绑了 IP 白名单,权限照样要收到最小。

密钥通常从这几个地方漏出去

下面几条路径都不需要对方有什么技术,密钥是自己走出去的:

  • 提交进 Git。硬编码在代码里,随手一个 commit 就上去了。哪怕仓库是私有的、哪怕你后来删掉了那一行,历史记录里还在;公开仓库则是所有人都能读到。
  • 写在截图里。发终端截图求助、录屏演示,配置文件那一行正好在画面里。密钥是长串随机字符,人眼扫过去不会注意,但它就在那儿。
  • 贴进群里求助。报错信息连着配置一起复制粘贴,群里几百号人,你并不知道都有谁。
  • 装了来路不明的「策略脚本」。对方给你一个「稳赚的机器人」,让你把 apiKey 填进去。脚本连到谁的服务器、把密钥传去了哪,你完全不知道。凡是要你填 API 密钥的第三方程序,默认都该当成会拿走密钥来对待。
  • 直接交给了别人。有人说要「帮你配置机器人」「代客理财」,让你把 SecretKey 和 Passphrase 发过去,或者建一把带提现权限的 Key 交给他。这不需要任何漏洞,你给出去的就是账户的操作权。自己在本地用最小权限的 Key 跑策略,不需要任何人经手这三样东西。
  • 日志和报错。调试时把整个请求对象打印出来,密钥跟着进了日志文件,而日志的权限往往比代码宽松,还可能被上传到某个日志服务。

最小授权怎么落地

「最小授权」拆开是这几条具体做法:

  • 一个 Key 一个用途。看板和统计脚本用只读 Key,下单的策略用交易 Key,两把分开。看板那把泄露了,损失只是信息;而且出事时你能立刻定位是哪条链路漏的。
  • 一套策略一把 Key。同时跑几套策略时别共用,出问题只停一把,不影响其他。
  • 定期轮换,不用就删。每把 Key 都是一个敞口。临时测试用完立刻删,账户里挂着一堆早就忘了用途的 Key,本身就是隐患。
  • 密钥不进代码。放环境变量或不会被同步的本地配置文件里,并把配置文件写进 .gitignore。
  • 跑脚本的钱和大仓分开。如果平台支持子账户,把量化资金单独放一份,主仓不参与。策略出错或者密钥出事,烧到的是有上限的那部分。要注意的是:这一层隔离要靠子账户自己的 Key 才成立。母账户的 Key 只要带交易权限,就能在母子账户之间划转,拿它去跑策略等于把隔离又打开了。

建 API Key 前后的核对清单

把上面几节收成一张表。前四条在创建页上当场就能做完,后四条是建完之后一直要守的。

什么时候核对项为什么
建 Key 时权限只勾「读取」和「交易」,不勾「提现」策略只需要下单和查询;没有提现权限,币提不到链上
建 Key 时绑定 IP 白名单,只填跑脚本那台机器的出口 IP密钥泄露后在别的机器上调不动;欧易每把 Key 最多绑 20 个 IP,支持网段
建 Key 时Passphrase 自己设一个,和 SecretKey 一起当场存好欧易只保存 Passphrase 加密后的哈希值,忘了无法恢复,只能重建一把 Key
建 Key 时跑策略用子账户自己的 Key,子账户里只放这部分资金母账户的 Key 带交易权限就能在母子账户之间划转,起不到隔离作用
建完后apiKey、SecretKey、Passphrase 不进代码、截图和聊天窗口放环境变量或不被同步的本地配置文件,并把配置文件写进 .gitignore
建完后不用的 Key 立刻删,在用的定期换每把 Key 都是一个敞口;未绑 IP 且带交易或提币权限的 Key,欧易在闲置 14 天后还会自动删除
建完后任何人索要 SecretKey、Passphrase,或要你建带提现权限的 Key 交给他,一律不给这等于交出账户的操作权
建完后账户本身开两步验证(2FA),并设置防钓鱼码这是 API 之外的底座:账户本身被攻破,API 这一层设得再严也没用

八条都做到,代表的是开 API 跑策略前应有的最低门槛,不是绝对安全。其中前两条必须同时做:只带交易权限的密钥照样能下单和划转,要靠 IP 白名单让它在别处失效。

发现泄露之后,按这个顺序处理

  1. 先删密钥,别先查原因。登录账户,把那把 Key 直接删掉,不是改权限,是删。断掉对方的能力比弄清真相紧急,原因可以事后慢慢查。
  2. 停掉正在跑的程序。否则你的策略会因为 Key 失效不停报错,还可能触发一些奇怪的重试逻辑。
  3. 看挂单和持仓。撤掉所有不是自己下的挂单,检查有没有被开出来的仓位,合约那边尤其要看。
  4. 翻近期成交记录。找价格明显偏离的成交、你没下过的单。这一步决定了损失到底有多大。
  5. 查划转记录和子账户。交易权限本身就能划转,所以只看订单是不够的:资金账户与交易账户之间、母账户与子账户之间的划转流水都要翻一遍,再逐个确认子账户里的余额对不对得上。
  6. 核账户设置有没有被改。账户模式、杠杆倍数这类能通过接口改的设置项,对一遍是不是你自己设的。
  7. 换账户凭证。密码和二次验证一并处理,因为你还不确定泄露的只是密钥。
  8. 重建 Key,这次配齐最小权限和 IP 白名单。然后回头排查泄露路径:代码、截图、日志、装过什么脚本,一个个过。

顺序的重点全在第一条。发现异常后,别先截图、问人、研究到底怎么回事,这段时间对方还在用。

安全与风险提示:本文讲的是通用原理,各平台的权限名称、IP 白名单规则、子账户能力都不一样,创建密钥前请以你所用平台的官方文档为准。加密资产价格波动剧烈,量化策略不保证盈利,合约与杠杆可能导致全部本金亏损。本文不构成投资建议,也不对任何具体平台的接口安全性或稳定性作出评价。

常见问题

只开了交易权限、没开提现,密钥泄露了资金还安全吗?

资产提不到链上,但不等于安全。按欧易 API 文档,交易权限本身就含资金划转和一部分账户设置,所以拿到它的人可以在你的资金账户、交易账户和子账户之间搬钱,也可以用你的余额在流动性差的交易对上以极差的价格成交、把差价转移给自己,还可以反复对敲磨掉手续费、平掉你的持仓,或者在合约上给你开一个反向仓位。钱还在你名下,只是可能变少了,也可能换了账户。所以权限最小化必须和 IP 白名单一起用。

提现权限什么时候才需要开?

只用来跑策略的密钥,永远不需要。提现权限管的是把币提到链上地址,而策略脚本要做的是下单。这里容易混的一点是:资金账户与交易账户之间、母账户与子账户之间的划转,交易权限就能做,不必为了划转去开提现。一把带提现权限的密钥泄露后几乎没有补救窗口,对方一条请求就能把资产转到自己的地址,而链上转账不可撤销。真要往外提,建议手动操作,别为省几步操作换来这个敞口。

欧易的 API Key 不绑 IP 会被自动删除吗?

会,但有条件。欧易 API 文档写的是:未绑定 IP 且拥有交易或提币权限的 APIKey,将在闲置 14 天之后自动删除;模拟盘的 API Key 不会被删除。算不算「使用」,看有没有调用需要 APIKey 鉴权的接口;WebSocket 只有登录那一下算使用,登录后的订阅和下单不算。绑了 IP 的 Key 不在这条规则里。

忘了 API Key 的 Passphrase 怎么办?

找不回来。欧易 API 文档写明,Passphrase 由你自己提供,平台只保存它加密后的哈希值用于验证,忘记后无法恢复,只能在网站上重新生成一把 APIKey。所以建 Key 时就把 Passphrase 和 SecretKey 一起存进密码管理器,或者不会被同步的本地配置文件。

几个程序共用一把 API 密钥可以吗?

不建议。共用意味着任何一个程序出问题,你都得停掉所有依赖这把 Key 的东西,而且出事时很难判断是哪条链路漏的。按用途分开:看板和统计用只读 Key,每套下单策略各自一把交易 Key。多建几把的成本很低,排查和止损时的收益很大。

别人给的策略脚本要我填 API 密钥,能用吗?

默认不要用。你无法知道那段代码把密钥发去了哪里,而它一旦拿到交易权限,就能用你的余额做对它有利的事。真要试第三方程序,至少确认代码可读、自己能看懂密钥的使用路径,并且先在只有极少资金的子账户上、配好 IP 白名单再跑。凡是承诺稳赚的,风险也不只在密钥这一层。

发现密钥可能泄露了,第一件事做什么?

直接删掉那把 Key,不是改权限,是删。断掉对方的能力比弄清原因紧急。删完再停掉本地程序、撤掉不认识的挂单、检查持仓和近期成交;因为交易权限本身就能划转,还要翻一遍划转记录、核对子账户余额、看账户设置有没有被改过。然后更换账户密码与二次验证,最后才重建一把配好权限最小化与 IP 白名单的新 Key,并回头排查泄露路径。

密钥设好之后,下一层是把仓位上限和止损写进脚本,见 OKX API 自动交易风控。