【问题标题】:How to prevent others from using my REST API?如何防止其他人使用我的 REST API?
【发布时间】:2022-01-08 06:28:25
【问题描述】:

我使用 expressJs 开发了简单的 REST API。我使用 React 作为我的客户端应用程序。所以问题是任何人都可以看到我的 API 端点,因为 react 应用程序在客户端。因此,他们还可以从我的 REST API 发出请求并获取数据。 (可能他们会使用我的 API 构建自己的客户端应用程序。)我已经看到了一些关于此的问题,但找不到任何全面的答案。应该如何处理这类安全问题?是否可以仅将 API 访问权限授予我的客户端应用程序?如果不是,使用 REST API 的大品牌如何阻止这种情况? (另外我的产品中也没有用户验证场景。人们可以访问和使用该网站。他们不需要注册)。

【问题讨论】:

  • 因此,请按照括号中的最后一句话:将用户身份验证添加到您的系统。您正在绘制的场景是通过确保允许使用正确凭据的连接(例如通过 API 密钥/身份验证令牌,而不是通过每次传输用户/通行证)来解决的,并且其他所有人都会得到 403。
  • 然后您将其添加到您的帖子中,答案是“确保设置正确的 CORS 和 CSP 规则”,并且您还确保只有与活动会话的连接(因此即使没有身份验证:使用会话管理)获取 API 响应。
  • 对于 CORS,express 建立了自己的库(参见 expressjs.com/en/resources/middleware/cors.html),对于 CSP,以及许多其他安全层,如 HSTS、XSS 过滤等,您通常使用 helmet
  • 如说不。想象一下,你添加了会话,然后有一个单一的使用令牌,然后一个抓取脚本可以首先获取令牌,想象你有 cookie 或其他令牌,然后一个抓取器可以先抓取它,你需要登录然后一个抓取器可以先登录.如果您的 API 是完全开放的,那么您无能为力,除了查找 IP 地址可以将其与已知托管服务提供商列表进行比较,计算单个 IP 的使用情况,即一个 IP 似乎每天赚取 100k 并且正在登录多个帐户,或者如果没有帐户一次使用多个一次性令牌等。
  • 客户端应用程序直接访问你的 API 是不同的,CORS 会保护它,但你无法保护它免受 app.use('/his-api', proxy('https://yoursite.com')) 或在路径上执行逻辑的自定义脚本之类的东西,即 @ 987654325@、/register 使用 node-fetch 调用您的 API 以登录/注册,然后将标头和所有好东西通过管道传输到客户端。防止报废实际上只能通过检测 IP 是否是报废者来完成,尽管 IP 位置或滥用(例如一个 IP 已注册 100 倍等)

标签: node.js reactjs api express security


【解决方案1】:

身份验证可以是一种方式,但可以绕过它。另一种方法是您可以创建一个代理服务器来严格阻止跨源请求,因此它会阻止来自其他域的请求以向您的 API 发出请求,并且您可以从该代理服务器进行 API 调用。这样您的 API 服务器端点也不会受到损害。

【讨论】:

    【解决方案2】:

    如果,正如您在评论中所说,这是关于您自己网站上的用户被允许使用您网站的 API,同时不允许异地使用(例如其他网站,wget/curl 等),那么您需要确保设置正确的 CORS 规则(禁止跨域使用您的 API)以及 CSP 规则(以防止用户注入的脚本代理您的 API),并且您还确保只允许 API 调用来自具有活动会话的连接(因此即使您不想要用户身份验证:使用会话管理器,这样您就可以判断是否有人登陆您的站点并在他们开始调用 API 端点之前设置了会话 cookie)。

    会话管理和 CORS 自带 express(参见 https://expressjs.com/en/resources/middleware/session.htmlhttps://expressjs.com/en/resources/middleware/cors.html),对于 CSP 和许多其他安全层,如 HSTS、XSS 过滤等,您通常使用 helmet

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 2015-08-14
      • 1970-01-01
      • 2012-03-26
      • 2014-12-28
      • 1970-01-01
      相关资源
      最近更新 更多