Web Services 如何保护公共API?

w1jd8yoj  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(108)

我想了解如何保护公共API。
我正在构建一个云服务,它提供一个SaaS应用程序,这是我的核心产品,现在已经准备好了。但我也希望给予用户扩展其体验的能力,将我的服务包含在他们的产品中。因此,我构建了一个基本的API,其中包含一个用户可以在其项目中生成和使用的API Key。
我知道API密钥并不意味着安全,但我相信我需要提供一些东西来保护用户数据不受攻击者的攻击。所以我遇到了API域过滤和权限。
由于我的端点只是少数,我不需要权限,但我认为允许用户指定哪些域名允许与他们的API端点交互是另一种安全级别的方式。
问题是请求的“Host”标头可能被欺骗,因此如何正确检查请求域是否与API用户指定的域之一匹配?
我的API Key是由一个哈希函数生成并编码的,只有在创建Key的时候才会向用户显示,并且只有哈希值保存在数据库中。我还建议用户保持他的API Key的安全。
在我检查请求域的方法中,我使用了“Host”头,但它可能会被欺骗,所以感觉不像是额外的安全级别。
那么有没有什么最佳实践来保护公共API?你对我的实现有什么建议吗?关于如何检查请求域的任何建议?

lyfkaqu1

lyfkaqu11#

API密钥(或令牌)本身并不是不安全的,只要它们保持安全即可。可以通过以下方式提高安全性:

  • 使用带有许多不同字符的长键。
  • 减少密钥(或令牌)的生命周期。这增加了如果有人在未经许可的情况下以某种方式看到密钥,则该密钥将不再工作的可能性。然而,这里也需要适当的平衡,因为新密钥必须交付给用户,这充满了风险。
  • 密钥/令牌黑名单,以防某些东西不再被视为安全。
  • 请求客户端的IP白名单(通常只有当客户端像其他服务器一样具有静态IP地址时才可实现)。

我真的不明白你提到的主机头。主机名是指你的API端点(或你的用户)。欺骗它有什么意义?发出请求的客户端本身是潜在的威胁,不能通过主机名识别,只能通过它的IP地址和HTTP头。然而,后者可以随意操纵,正如你已经正确指出的那样。

相关问题