Reach

Grow

Manage

Automate

Reach

Grow

Manage

Automate

API 密钥的 IP 白名单

电子邮件

1 min read

API 密钥的 IP 白名单

电子邮件

1 min read

API 密钥的 IP 白名单

在像 SparkPost 这样的 API 为先的产品中,有很多种构建身份验证的方法,而我们早期选择的方法是使用 API 密钥。将 API 密钥作为原始授权标头或通过标准 HTTP Basic Auth 注入,使得使用我们的 API 变得非常简单。这种 API 密钥是网络服务的常见标准,但这种系统的安全性如何?

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

风险

使用任何网络服务时,如果攻击者获取了您的API密钥,他们可以代表您采取行动,并执行以下操作(在我们的情况下):

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

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

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

  • 代表您发送垃圾邮件或钓鱼邮件

这些结果中的任何一个都可能对您的声誉和您的业务造成严重损害,并且在钓鱼的情况下可能直接损害您的最终用户。这就是为什么确保没有人可以发现您的API密钥是极其重要的。

The odds

我是否听到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证书(这是我们要求API连接使用https的一个主要原因)。此外,如果您不慎使用公共代码库如github,您的API密钥可能会轻易暴露。这不是学术问题:已知有机器人在爬取github以查找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证书(这是我们要求API连接使用https的一个主要原因)。此外,如果您不慎使用公共代码库如github,您的API密钥可能会轻易暴露。这不是学术问题:已知有机器人在爬取github以查找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证书(这是我们要求API连接使用https的一个主要原因)。此外,如果您不慎使用公共代码库如github,您的API密钥可能会轻易暴露。这不是学术问题:已知有机器人在爬取github以查找API密钥,而且已经有通过该途径的成功攻击。

IP 白名单拯救

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

有了这个功能,即使您的API密钥被发现或被盗,只有您的服务器才能使用它。鉴于风险以及设置的简易性,我们强烈建议所有客户使用此功能。

最后的话

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

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

  • 你可以创建无限数量的API密钥,为了安全,最好在多个API密钥间分配职责,而不是只使用一个万能密钥。这也允许你为每个密钥设置不同的IP白名单,以实现更好的问题分离。

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

  • 由于API密钥只能通过UI创建,在你的SparkPost账户上启用双因素身份验证 是必须的,只需花费2分钟。

让我们为您联系Bird专家。
在30分钟内见证Bird的全部威力。

通过提交,您同意 Bird 可能会就我们的产品和服务与您联系。

您可以随时取消订阅。查看Bird的隐私声明以获取有关数据处理的详细信息。

Newsletter

通过每周更新到您的收件箱,随时了解 Bird 的最新动态。

让我们为您联系Bird专家。
在30分钟内见证Bird的全部威力。

通过提交,您同意 Bird 可能会就我们的产品和服务与您联系。

您可以随时取消订阅。查看Bird的隐私声明以获取有关数据处理的详细信息。

Newsletter

通过每周更新到您的收件箱,随时了解 Bird 的最新动态。

让我们为您联系Bird专家。
在30分钟内见证Bird的全部威力。

通过提交,您同意 Bird 可能会就我们的产品和服务与您联系。

您可以随时取消订阅。查看Bird的隐私声明以获取有关数据处理的详细信息。

R

Reach

G

Grow

M

Manage

A

Automate

Newsletter

通过每周更新到您的收件箱,随时了解 Bird 的最新动态。