API 密钥的 IP 白名单

电子邮件

·

2015年8月19日

API 密钥的 IP 白名单

关键要点

    • API keys 是强大的凭证——如果泄露,攻击者可以发送电子邮件,窃取数据或假冒您的品牌。

    • 暴力破解 40 个字符的 hex key 基本上是不可能的;真正的威胁来自于信息暴露(MITM 攻击、不安全的代码库、凭证泄露)。

    • 始终使用 HTTPS 并验证 SSL 证书以防止您的 API keys 被拦截。

    • IP 白名单通过限制 key 的使用至特定的 IP 或 IP 范围来添加重要的保护层。

    • 即使攻击者窃取了您的 API key,除非他们从批准的 IP 连接,否则无法使用。

    • CIDR 支持使得授权整个网络变得容易,而无需列出每个服务器。

    • 避免在代码中嵌入 API keys——请改用环境变量或安全的密钥管理解决方案。

    • 创建多个范围狭窄的 API keys 而不是一个“全能”的 key——每个 key 具有有限权限及其自己的白名单。

    • 对于第三方集成,创建具有受限授权和受限 IP 的专用 keys。

    • 启用账户的 2FA,因为 API keys 只能通过 UI 创建。

    • 定期审查、轮换和退役 keys 以维持强大的运营安全。

Q&A 精华

  • 什么是IP whitelisting?

    这是一个安全功能,限制 API 密钥使用范围到特定的 IP 地址或 IP 范围。

  • 为什么SparkPost/Bird使用API keys进行身份验证?

    API keys 是简单的,广泛采用,并且可以与 REST APIs 和 SMTP 紧密配合。

  • 如果有人偷了我的API密钥会怎么样?

    他们可以代表您发送邮件,下载收件人列表,修改模板,或发送损害您品牌的网络钓鱼/垃圾邮件。

  • API keys可以被暴力破解吗?

    几乎不可能。一个40字符的十六进制字符串有大约 ~1.46e48 种组合——暴力破解所需的时间会比宇宙的年龄还要长。

  • 那么攻击者通常如何获取 API keys?

    中间人攻击(如果SSL没有验证)、在公共GitHub库中暴露的密钥或日志意外泄露密钥。

  • IP 白名单如何帮助?

    即使攻击者偷走了您的密钥,除非他们从批准的IP连接,否则它也不起作用。

  • 我可以将整个网络加入白名单吗?

    是的,通过CIDR表示法——非常适合负载均衡服务器、VPN或静态办公范围。

  • Whitelisting 是否适用于 REST 和 SMTP?

    是的,传入请求的IP必须与您的白名单匹配。

  • 我可以将多少个 IP 或范围列入白名单?

    您需要的数量不限—多个独立IP或区块。

  • 我应该为所有事情使用一个API密钥吗?

    不。为不同的系统、团队或供应商创建单独的密钥。这提高了安全性,并使密钥更容易轮换或撤销。

  • 我应该在哪里存储 API keys?

    使用环境变量——切勿将密钥硬编码到源文件或公共代码库中。

  • 任何其他安全最佳实践?

    始终在您的SparkPost/Bird账户上启用2FA,并为第三方创建专用密钥,给予最低限度的权限和他们自己的白名单。

在像 SparkPost 这样的 API 优先产品中构建身份验证有很多方法,而我们早期选择的是使用 API 密钥。将您的 API 密钥作为原始 Authorization 标头或通过标准 HTTP Basic Auth 注入,使我们的 API 非常易于使用。像这样的 API 密钥是网络服务的常见标准,但这个系统有多安全呢?

风险

在使用任何网络服务时,如果攻击者获得了您的API密钥,他们可以代表您采取行动,并做类似以下的事情(在我们的例子中):

  • 通过您的账户免费发送他们的邮件

  • 下载您的收件人列表并将其提供给垃圾邮件发送者(如果他们本身不是垃圾邮件发送者的话)

  • 编辑您的模板以注入网络钓鱼链接

  • 代表您发送垃圾邮件或进行网络钓鱼

任何这些结果都可能对您的声誉和业务造成极大的损害,在网络钓鱼的情况下甚至可能直接损害您的终端用户。这就是为什么确保没有人能发现您的API密钥非常重要。

胜算

我听到 bruteforce? 我们的 API 密钥是随机生成的40位长十六进制字符串。 这总共生成 1.4615e+48 个 API 密钥。 如果世界上所有 30 亿台计算机和智能手机每秒尝试 100 个 api 密钥,假设我们的服务器允许,那么遍历所有可能的 API 密钥将需要超过 150,000,000,000,000,000,000,000,000,000 年。所以暴力破解 API 密钥没有意义。

那么如何有人能找到你的 API 密钥?因为密钥是作为一个头传递的,它可以通过中间人攻击被读取,您应该始终确保您的客户端在连接我们的 API 时检查 SSL 证书(这也是为什么我们要求 https 用于 API 连接的主要原因)。此外,如果您在使用像 github 这样的公共代码库时粗心大意,您的 API 密钥很容易暴露在外。 这不是一个学术问题:有一些已知的机器人正在爬行 github 寻找 API 密钥,并且已经通过该向量进行了成功的攻击。

IP whitelisting 是解决方案

在创建API密钥时,您现在可以指定一个被授权使用此密钥的IP列表。您可以使用CIDR表示法指定多个IP以及IP块,这样您就不必单独列出您的服务器。当API密钥被用于REST API或SMTP时,我们将依据此列表对连接IP进行匹配,以允许或拒绝访问。

通过此功能,即使您的API密钥被发现或被盗,也只有您的服务器能够使用它。

Common API Key Threats and Mitigations

威胁

描述

推荐的缓解措施

在公开代码仓库中泄露密钥

提交到GitHub的API密钥可能被机器人收集

将密钥保存在环境变量中;立即更换泄露的密钥

中间人拦截

在不安全连接中读取API密钥

始终强制使用HTTPS并验证SSL证书

从攻击者基础设施使用被盗的API密钥

攻击者可以发送邮件、窃取数据或修改模板

使用IP白名单限制可以使用密钥的IP

权限过多的“瑞士刀”API密钥

单个密钥如果被妥协会授予太多特权

创建多个狭窄范围的密钥,限制授权

第三方集成错误使用共享密钥

外部合作伙伴可能会意外暴露或误用您的密钥

为每个合作伙伴生成专用密钥,并限制IP和权限

鉴于风险和设置的简单性,我们强烈建议所有客户使用此功能。

在创建API密钥时,您现在可以指定一个被授权使用此密钥的IP列表。您可以使用CIDR表示法指定多个IP以及IP块,这样您就不必单独列出您的服务器。当API密钥被用于REST API或SMTP时,我们将依据此列表对连接IP进行匹配,以允许或拒绝访问。

通过此功能,即使您的API密钥被发现或被盗,也只有您的服务器能够使用它。

Common API Key Threats and Mitigations

威胁

描述

推荐的缓解措施

在公开代码仓库中泄露密钥

提交到GitHub的API密钥可能被机器人收集

将密钥保存在环境变量中;立即更换泄露的密钥

中间人拦截

在不安全连接中读取API密钥

始终强制使用HTTPS并验证SSL证书

从攻击者基础设施使用被盗的API密钥

攻击者可以发送邮件、窃取数据或修改模板

使用IP白名单限制可以使用密钥的IP

权限过多的“瑞士刀”API密钥

单个密钥如果被妥协会授予太多特权

创建多个狭窄范围的密钥,限制授权

第三方集成错误使用共享密钥

外部合作伙伴可能会意外暴露或误用您的密钥

为每个合作伙伴生成专用密钥,并限制IP和权限

鉴于风险和设置的简单性,我们强烈建议所有客户使用此功能。

最后的话

关于安全性的一些个人建议:

  • 不要将您的API密钥保存在代码中。将它们保存在环境变量中有很多好处,比如Heroku所做的那样。

  • 您可以创建无限数量的API密钥,出于安全考虑,最好将职责分配给多个API密钥,而不是仅使用一个万能钥匙。这也可以让您为每个密钥设置不同的IP白名单,以更好地分离关注点。

  • 如果您与第三方合作,不要共享您的API密钥,而是为他们创建一个新的,只授予所需的权限,并附加到他们的IP地址。

  • 由于API密钥只能通过UI创建,在您的SparkPost账户上启用双重认证是必须进行的操作,而且只需2分钟。

其他新闻

阅读更多来自此类别的内容

A person is standing at a desk while typing on a laptop.

完整的AI原生平台,可与您的业务一起扩展。

© 2026 Bird

A person is standing at a desk while typing on a laptop.

完整的AI原生平台,可与您的业务一起扩展。

© 2026 Bird