javascript - 保护我的 API

标签 javascript web-services api rest web-scraping

<分区>

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

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

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

假设 FrontEnd 仅为 JS/Html,我如何保护 API,以便来 self 自己页面的合法调用有效,但 curl 等来自第三方的调用无效?

最佳答案

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

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

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

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

关于javascript - 保护我的 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22298948/

相关文章:

Javascript 函数与 DOM 的区别?

java - 如何在java中添加 SOAP 头

api - FluentValidator 和 JsonPatchDocument

api - 有没有办法在浏览器中编译代码(C/C++)?

javascript - HTML/CSS/JavaScript : Can't click slideshow indicator button

javascript - CSS 的点击功能

javascript - AJAX表单只允许一次提交?

java - 使用java代码登录后向网站服务器发送响应代码500

java - JAX-RS Web 服务在 GlassFish Server 4.0 上运行,但在 Tomcat 上不运行

API - 我需要父资源吗?