保护我的API

时间:2014-03-10 11:31:16

标签: javascript web-services api rest web-scraping

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

我想保护API不被其他人使用 - 这样来电就可以来自网站(或者可能允许其他特定网站使用它)。

目前,如果有人使用curl,他将能够轻松地抓取API。

假设FrontEnd只是JS / Html,我如何保护API,以便来自我自己网页的合法调用有效但curl来自第三方的调用不起作用?

1 个答案:

答案 0 :(得分:4)

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

但实现此目的的一种方法是使用SSL,用户身份验证和令牌。这是一个纲要:

  1. 对使用API​​的网页使用SSL。
  2. 当您的网站新请求某个网页时,您会返回一个允许用户登录的令牌,而不是其他内容。该令牌与服务器上的请求IP地址相关联,并且只能用于来自该IP地址的请求,并且仅用于登录。
  3. 当用户登录时,您会为他们提供与其用户帐户和IP地址关联的新令牌。必须使用该令牌以及该IP地址进行所有后续请求。
  4. 将可以使用该令牌进行的API调用限制为仅必须能够使用的用户帐户的API调用。换句话说,默认拒绝。
  5. 在任何不活动的时间段之后超时令牌(在服务器上)似乎对你来说是合适的。
  6. 对使用您的应用程序的实际人员合理的费率进行限速请求。
  7. 广泛使用您的日志来确定典型活动的模式,以便您可以识别非典型活动并阻止它。
  8. 这可能是显而易见的,但要确保令牌难以预测(例如,不是稳定增长的数字)并且难以欺骗。尽管IP地址/令牌链接是在服务器端保留的,但您仍然不希望为潜在的黑客提供便利。
  9. 用户身份验证的一部分很重要,因为否则,虽然您可以非常安全地远程黑客(因为SSL),黑客使用浏览器访问您的网站,以便他/她可以获得然后令牌可以使用curl或类似于他/她的心脏内容与该令牌。因此,如果某人正在挖掘您的网站,您至少想知道他们可能是谁(您的用户身份验证),这样您就可以让他们停止。