账户里的每一把 API 密钥,都应该答得出这几件事:做什么用、哪个程序在调、跑在哪里、谁负责、开了哪些权限、从哪个 IP 来。答不上来的,禁用后调查,确认无人使用再撤销。新项目反过来,需求没写清之前不要创建密钥。

创建前写清程序到底要做什么

先列出程序需要读取哪些账户数据、是否提交订单、使用哪个产品、运行在哪里、由谁维护。行情查询如果能使用公开接口,就不该携带账户密钥;只读报表不需要交易权限;现货程序也不该顺带开放其他产品权限。说不清具体用途时,先不要授权。

第三方工具要求“全部权限以免报错”不是合理安全理由。让供应方列出具体接口和错误处理,并确认其隐私、日志与密钥保存方式。你无法验证的服务不应获得账户交易能力,更不应获得提现权限。

Binance 开发者文档的现货 REST API 页面
Binance 开发者文档截图,截于 2026-09;接口、权限与签名要求可能更新,实施前应回到当前文档核对。

权限设计:默认关闭,再按接口增加

用途允许范围思路必须避免
只读对账仅账户查询所需附带交易或提现
现货程序只开放对应交易权限开放无关产品
临时测试隔离环境和有限资产直接接生产主账户
任何常规用途提现保持关闭为方便启用提现

Binance 的现货 REST API 安全文档把接口按安全类型和权限区分,并说明签名请求的认证要求。实际授权时应从程序会调用的接口倒推权限,不按产品名称整组放开。程序功能变化、项目结束或人员离开时重新检查;暂时用不到的权限直接关闭。账户支持子账户或其他隔离方式时,也可以用它们缩小单把密钥泄露后的影响。

只读密钥能被拿去做什么

权限确实只有读取的密钥,不能提交订单或转移资产,但仍可能读取余额、历史成交和资金记录。具体可见数据取决于获准接口。泄露这些信息也有后果:攻击者可能据此推测交易习惯,或编造更有针对性的诈骗消息。

拿到一把只读密钥的人,可以长期知道你账上有多少钱、拿着哪些币、什么时候动手。定向诈骗和社工的说服力就是从这里来的——对方能报出你的持仓,你会更容易相信他真的是官方。做量化的人还多一层损失:历史成交和挂单被人看走,策略就等于半公开。读取充值地址的接口还能把交易所账户和你的链上地址连起来,隐私范围一下子扩大。

限流还要看具体产品和接口。按 Binance 现货 REST API 文档,请求权重按 IP 统计,未成交订单计数则按账户统计;不能一概说别人使用你的密钥就会占用你的请求额度。共用出口 IP 的程序可能争抢同一限额。只读密钥泄露后仍应立即撤销换新,并按账户数据可能已经外流处理。

下面按权限的实际作用分类,账户 API 管理页上的勾选项名称会比这里更细,产品线也会调整。

权限类别拿到它能做什么什么时候才该开
读取账户数据查余额、持仓、历史订单、充值地址程序确实要对账时;只取行情就用公开接口,别带密钥
现货与杠杆交易下单、撤单、动用杠杆额度只给真的要下单的程序,杠杆不需要就别一起勾
合约与衍生品开平仓、调整杠杆倍数现货程序一律不开,衍生品程序单独一把密钥
账户间划转把资金在你自己的钱包、子账户之间挪动确有自动划转需求时;它能把钱挪到你没盯着的地方
提现把资产转出账户常规程序保持关闭,需要时优先考虑人工操作

IP 白名单限制密钥从哪里调用

固定服务器应配置明确的出口 IP 白名单,不允许任意来源。先确认实际公网出口,避免把内网地址、动态家庭地址或整段宽泛网段误当成精确来源。多台服务器分别记录用途;退役服务器时同步删除其 IP。

云服务器迁移、故障切换或网络地址转换可能改变出口。变更前规划新旧地址的短暂交接和验证,完成后立即收紧。不要为了修复一次连接失败永久关闭白名单。若运行环境没有稳定出口,应重新评估架构,而不是放弃来源限制。

密钥不能出现在代码和日志里

API Key 与 Secret 等信息进入受限的秘密管理系统,通过运行时注入给后端进程。不要写进前端 JavaScript、移动应用包、容器镜像层、公开仓库、示例配置、工单或聊天。环境变量也并非自动安全,要控制进程、调试页面和崩溃报告的读取范围。

日志只记录请求标识、接口、状态、延迟和经处理的错误,不打印签名原文、请求头秘密或完整账户响应。调试工具和监控平台同样要脱敏。提交代码前用秘密扫描器检查历史;仅从最新版本删除字符串,旧提交中仍可能保留。

密钥通常是从哪几个口子漏出去的

除了服务器入侵,截图、日志、仓库历史和第三方工具也可能泄露密钥。这些位置容易被忽略,而且不一定会触发账户告警。

  • 截图和屏幕共享。写教程、给同事看报错、开会共享桌面时,API 管理页和配置文件常常整屏进画面。Secret 一般只在创建时显示一次,但 Key 本身长期可见,配合别处泄露的 Secret 就能拼起来。
  • 日志和错误上报。把整个请求连同查询参数和请求头打进日志,异常追踪服务、崩溃上报、CI 构建输出会顺手把它们收走并长期保存,读取这些平台的人往往比你想的多。
  • 代码仓库的历史。仓库转公开、被 fork 或做镜像时,历史提交里的那份会跟着一起走。
  • 第三方托管的机器人和“云策略”。密钥填进别人的服务器之后,它的安全状况就不再由你决定——对方被入侵、内部人员越权、业务转手,你都只能事后才知道。
  • 浏览器插件与自动填充。有页面读取权限的插件能看到你打开的 API 管理页。插件易主后推送一版带恶意代码的更新,是反复出现过的一类事件。
  • 聊天窗口、协作文档和在线调试工具。粘进群聊、工单附件、共享表格,或者密码管理器里那个“有链接就能看”的分享;为了排一个报错,把带密钥的完整请求贴进网页版工具或聊天式助手,也是同一回事。
  • 设备本身。开发机装过来路不明的远程工具、用公用电脑登过账户、旧手机没抹干净、配置目录被同步进未加密的云盘。

这几条的共同点是没有当场的报警声。所以监控要盯的是来源 IP 有没有变、有没有你从来没写过的接口被调用;等到余额少了再回头查,能补救的空间已经很小。账户安全检查清单里的登录设备与安全通知部分,可以和 API 登记表一起定期看。

签名失败或超时时,不要盲目重试

签名应使用官方当前文档指定的方法,密钥比较与编码不要自行发明。系统时间偏差可能导致请求被拒绝,应通过可信时间服务维护。接收窗口设置过宽会增加被重放的机会,具体参数照官方说明设。

交易请求超时时,不能盲目重试。请求可能已在服务器执行,只是响应丢失;应使用客户端订单标识和查询接口确认状态,再决定是否提交。对重试次数、幂等性和速率限制写明确规则,防止网络故障演变为重复订单。

测试环境与生产环境隔离

测试代码不要直接连接持有主要资产的账户。

  • 使用平台当前提供的测试能力,或严格隔离且暴露有限的账户。
  • 测试与生产的密钥、IP、日志和配置全部分开,测试数据不复制生产秘密。
  • 开发人员个人电脑不长期保存生产密钥。

部署流程要限制谁能读取或更换秘密,代码审核重点检查权限扩大、日志泄露和订单边界。上线前验证程序遇到价格异常、接口超时、部分成交和余额不足时会安全停止。没有损失上限的自动策略不应投入真实资金。

监控要能发现行为偏离

  • 记录密钥创建人、用途、权限、IP、运行服务和复核日期。
  • 监控异常来源、接口错误、订单频率和非预期交易对。
  • 为订单数量、名义金额和累计风险设置程序内硬限制。
  • 账户安全通知到达独立渠道,值守人员知道如何撤销。
  • 定期核对账户内 API 列表与内部登记是否一致。

告警信息要明确告诉你下一步该做什么,避免大量无意义消息掩盖真正的异常。监控系统本身不要保存能够调用账户的密钥。频率限制、接口状态和产品规则,都回到 Binance 当前页面与文档核对。

轮换与退役不是改一个字符串

  1. 创建权限更小或相同的新密钥,配置正确 IP 白名单。
  2. 在受控环境验证读取与下单边界。
  3. 分批切换服务,观察旧密钥是否仍有调用。
  4. 确认全部迁移后撤销旧密钥,而不是长期并存。
  5. 清理旧秘密存储版本、部署配置与人员访问权。

员工离职、供应商终止、服务器失窃、密钥误发和权限需求变化都应触发轮换或立即撤销。固定周期可以作为提醒,但不能替代事件触发。

换密钥的时候,怎样不让在跑的程序断掉

正常轮换时,可以在权限和 IP 白名单验证后,给新旧密钥安排短暂交接期,再逐台切换服务。若新配置有误,仍可恢复到已知可用配置。但怀疑旧密钥泄露时,应立即撤销,不为保持服务连续而继续开放它。

切换前后有几件事值得先想清楚:

  • 程序得能重新加载密钥。启动时读一次就固定在内存里的写法,意味着每次轮换都要重启;那就把重启安排成滚动的,别所有实例一起停。
  • 核对长连接的认证方式。不同产品的数据流凭证和失效规则可能不同;切换后按对应文档重新认证或建立连接,并确认订单、成交等事件仍在正常到达,不能只看进程仍运行。
  • 撤销前核对服务配置与调用记录。若账户管理页提供最近使用信息,可辅助检查;本地日志使用不含秘密的密钥标识来区分新旧配置,不为统计而记录完整密钥。
  • 已挂的单不跟着密钥走。撤销旧密钥一般不会连带撤掉挂单,但程序在切换的空档里可能暂时管不到它们,所以窗口挑在没有挂单、或者仓位你能手动兜住的时候。
  • 并行期间两套连接同时在打接口,请求总量比平时高,更容易撞上限流。这也是共存期要短、要有明确结束时间的原因。

时间点也要挑。行情剧烈波动、结算前后、平台公告的维护窗口附近都不适合动密钥——真出了问题,你很难分清是切换切坏的还是别的原因。切完记进登记表:谁在什么时候切了哪几台机器、旧密钥什么时候撤的、有没有服务报过鉴权失败。

怀疑泄露时,先撤销,再保留调用证据

密钥泄露后,拿到它的人可以在授权范围内替你操作。立即在账户安全页禁用或删除相关密钥,暂停受影响的自动程序,然后检查开放订单、成交、资产与其他密钥。保护邮箱和账户登录,确认没有新增验证方式。调用日志、来源 IP、订单编号和时间线可以留证,真实 Key、Secret 和签名原文不要再复制到工单或群聊。

撤销后再查根因:公开提交、日志、第三方、服务器入侵还是人员误操作。未修复根因前不要重新发放同等权限。新密钥先做范围有限的测试,并观察旧客户端是否出现预期的鉴权失败;这能找出漏迁的服务,但不是延长旧密钥寿命的理由。如果出现非本人交易,从可信官方入口报告,并按所在地程序保存材料。

第三方接入和人员交接最容易漏什么

把 API 密钥交给交易机器人、报表服务或外包维护者,本质上是把一部分账户能力交给另一套系统。安装页写着“只读”还不够,要回到账户的 API 管理页核对实际权限。第三方若要求关闭 IP 限制、启用与任务无关的产品权限,或让你把秘密粘进网页聊天,先停止接入。无法说明密钥存放地点、调用来源和撤销方法的服务,不适合连接真实账户。

接入前留下四个答案

  • 用途:它只读余额、读取成交,还是会真正提交和取消订单。
  • 范围:需要哪些产品、交易对、来源 IP 与账户,不需要的保持关闭。
  • 保管:秘密由哪套系统保存,哪些人员能读取,日志是否会遮蔽敏感字段。
  • 退出:服务停用、人员离开或设备丢失时,谁负责撤销并核对残留调用。

这些答案应写在不含秘密值的登记表里。密钥名称可以体现用途和环境,但不要包含客户身份、服务器地址或其他可被滥用的资料。若同一第三方服务多个策略,每个策略仍应有独立密钥;这样异常出现时能只切断受影响部分,也能从调用和订单记录追到来源。

交接不是把配置文件发给下一位

维护人员变更时,先列出账户内仍有效的密钥,再和实际运行服务逐项对应。无人认领、用途说不清或最后调用时间异常的密钥应先禁用调查。新维护者需要的是用途说明、部署位置、告警方法和撤销步骤,而不是旧人员保存的秘密副本。交接完成后收回旧访问权,并检查代码托管、自动部署、工单附件和密码管理器共享组是否仍能看到历史秘密。

退役时保存的证据也要克制:记录密钥标识末尾、用途、撤销时间和负责人即可,不复制完整值。随后观察程序是否出现预期的鉴权失败,并确认没有人为恢复旧配置。若某个服务只能靠长期开放任意来源、共享高权限密钥才能运行,问题出在架构上,光靠约束操作习惯压不住;应先降低账户规模或停用该接入,再重新设计。