保护我的API

Protecting my API

本文关键字:API 我的 保护我 保护      更新时间:2023-09-26

我已经创建了一个基于我的API的网站-这样我的FrontEnd就可以使用一个简单的REST API从后端解耦(前端是纯javascript/html)。

我想保护API不被任何人使用——这样调用就可以单独来自网站(或者可能允许其他特定的网站使用它)。

现在,如果有人使用curl,他将能够非常容易地抓取API。

我如何保护API假设前端是JS/Html只有,所以合法的调用从我自己的页面工作,但curl和这样的第三方不?

这个问题可能不适合SO,因为可能有多个相同有效的答案。

但是这样做的一种方法是使用SSL、用户身份验证和令牌。下面是一个概要:

  1. 为使用API的页面使用SSL
  2. 当一个页面从您的站点被新请求时,您返回它与一个令牌,允许用户登录,没有其他。该令牌与服务器上的请求IP地址相关联,并且只能用于来自该IP地址的请求,并且仅用于登录。
  3. 当用户登录时,您给他们一个与他们的用户帐户和IP地址相关联的新令牌。所有后续请求必须使用该令牌,并从该IP地址发出。
  4. 限制可以使用该令牌进行的API调用,仅允许该用户帐户必须能够使用。即默认拒绝。
  5. 在您认为合适的任何不活动间隔后,使令牌(在服务器上)超时。
  6. 将请求的速率限制为一个实际使用你的应用程序的人合理的速率。
  7. 广泛使用日志来确定典型活动的模式,这样您就可以识别非典型活动并阻止它。
  8. 这可能是显而易见的,但要确保令牌难以预测(例如,不是一个稳定增长的数字)并且难以欺骗。虽然IP地址/令牌链接保存在服务器端,但您仍然不想让潜在黑客的生活变得轻松。

其中的用户身份验证部分很重要,因为否则,虽然您可以很安全地免受远程黑客攻击(因为SSL),但使用浏览器访问您的站点以便他/她可以获得令牌的黑客可以使用curl或类似于他/她的令牌内容。因此,如果有人在挖掘您的站点,您至少希望知道他们可能是谁(您的用户身份验证),以便您可以阻止他们。