【问题标题】:REST API only accessible through my React clientREST API 只能通过我的 React 客户端访问
【发布时间】:2020-02-07 06:51:41
【问题描述】:

我正在构建一个 React.js 应用程序,它将与我在 Go 中构建的 REST API 进行交互。

React 将使用 Javascript Fetch API 向我的 API 发送请求。

问题是我想保护我的 API 不被其他地方请求。任何人都不能通过 URL 或 Postman 等任何其他客户端直接访问我的 API。

我知道 JWT 是什么,但这并不能解决我的问题,因为任何人都可以通过浏览器访问令牌,然后使用令牌继续在 React 客户端之外请求 API。

我进行了广泛的研究,但没有什么能真正符合我的描述。

非常感谢您提前提供的帮助。

【问题讨论】:

  • 您打算如何为网页提供服务?一个想法是生成一个随机数,作为网页的标题发送。然后使用 nonce 访问 API。然后,API 将在后续请求的每个请求中返回另一个随机数。这将通过要求您使用网页加载的初始随机数调用它来实质上保护 API。它并不完美,但总比没有好。
  • @JustinSavala 所以本质上你是在考虑为每个请求生成一个随机数,而这个特定的随机数将有 1 个请求的生命周期?
  • 这是一种方法,是的。不过,攻击者只需要在 React 客户端使用它之前获取 nonce,然后它就可以发出请求并接收新的 nonce。
  • 这不是一个理想的方法,但它至少可以阻止随意的攻击。
  • 谢谢大家。

标签: rest api security go mux


【解决方案1】:

这是一个天生无法解决的问题。 React 在客户端上运行。客户端控制它执行的代码。因此,你用来限制 API 使用仅限于你的 React 客户端的任何机制都可以在其他客户端上下文中被发现和重用。你无法控制客户,如果回报足够有价值,那么尝试这样做就会失败。

您可以尝试通过使用短期授权令牌来加强它,但没有什么可以阻止该令牌在另一个上下文中被抓取和重用。

如果您必须限制对 API 的访问,您应该有一个危险性或特权较低的公共 API,并且公共 API 应该使用您的私有 API,有效地代理调用以隐藏私有 API,以及以确保仅针对特权更高的 API 执行经过验证的查询。

如果你能描述你试图缓解的问题,那么可能还有其他可用的解决方案。

【讨论】:

  • 这是我担心的反应。谢谢你的回答。
猜你喜欢
  • 2021-01-23
  • 1970-01-01
  • 2017-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多