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