如何在生产中禁用 HATEOAS?

How to disable HATEOAS in production?

我的 REST API 仅供我们自己的移动应用程序使用,它还有一些受限端点供管理员使用 UI。通过观察移动应用程序的通信很容易获得切入点。从那里,恶意用户很容易使用 HATEOAS 发现所有可能的端点。

即使 API 受到 Spring 安全性的适当保护,也存在已知的安全漏洞,例如 https://jira.spring.io/browse/DATAREST-1144,允许修改只读数据。

在开发过程中,HATEOAS 很有用,但我想在生产中禁用它,以便更难发现端点。

而不是禁用 HATEOAS(您的应用程序应该使用它来查找端点!)您应该相信您的安全层会尽力而为。

这里有一些注意事项:

  • 将用户授权添加到您的管理端点。也许您可以使用现有的 API 关键基础设施来实现这一目标。
  • 将管理端点移动到一个单独的、受保护的 API

这些建议都不是快速修复,但我不建议禁用 HATEOAS。一旦它消失了,您找到您需要的问题。

您提出的解决方案意味着您打算依靠 Security through Obscurity 来保护您的管理功能。这是一个坏主意,因为恶意行为者仍然可以 猜测 他们不应该访问的相关功能,或者只是记住他们通过遍历 link 层次结构学到的东西当你最后一次暴露它时。

你绝对应该实施一个强大的身份验证和授权机制来保护你的资源,然后即使坏人可以通过未受保护资源的 links 结构发现到那些受保护资源的路由,他们将无法访问它们。链接 意味着 会被发现,即使它们被不适合它们的人发现,安全最佳实践仍应确保它们不会造成伤害。