【发布时间】:2018-01-25 06:28:44
【问题描述】:
已经使用以下方法创建了一个节点 JS API 应用程序: https://github.com/spoonx/wetland
为了保护该 API,我认为我会为每个用户分配一个 API 密钥,但我一直在想一个问题,即有时恶意用户获取其他用户的 API 密钥并且他可以使用该 API。
所以我的问题是如何保护我的 API 以应对所有这些黑客攻击?
【问题讨论】:
已经使用以下方法创建了一个节点 JS API 应用程序: https://github.com/spoonx/wetland
为了保护该 API,我认为我会为每个用户分配一个 API 密钥,但我一直在想一个问题,即有时恶意用户获取其他用户的 API 密钥并且他可以使用该 API。
所以我的问题是如何保护我的 API 以应对所有这些黑客攻击?
【问题讨论】:
如果需要,您可以通过多种方式锁定您的 API,请记住,您添加的安全性越高,最终用户使用您的 API 的难度就越大。
IP 地址锁定
您可以为每个用户分配一个 IP 地址并将其存储在数据库中。在您的身份验证中间件中,一旦用户成功使用他们的 API 密钥进行身份验证,您将使用 request.connection.remoteAddress 检查他们的请求 IP。如果 IP 匹配,则允许连接,否则拒绝连接。
JSON 网络令牌
您可以使用的第二件事是 JWT,它们是无状态对象,您可以使用它们来验证您的用户。这是实现 API 的一种更安全的方式。你可以阅读它here
使用 HTTPS
使用 HTTPS 将确保没有人能够嗅探 (MiTM) api 密钥和随请求发送的任何其他信息。使用 HTTPS 将为您的应用添加额外的安全层,这将使恶意行为者更难访问您的 api 密钥。
请记住,所有这些解决方案都将为您的令牌/api 密钥提供更高的安全性,但如果您的某个用户公开了他们的 API 密钥,那么您将需要撤销该 API 密钥并生成一个新密钥,或完全删除那个。
因此,我建议将 API 密钥与用户一起存储在数据库中,以便您可以轻松地为特定用户撤销或重新生成 API 密钥。您还应该保留 API 请求的日志,以便在未实施 IP 地址锁定的情况下检测异常流量或来自未知来源的流量。
【讨论】: