如何在生产中禁用 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 结构发现到那些受保护资源的路由,他们将无法访问它们。链接 意味着 会被发现,即使它们被不适合它们的人发现,安全最佳实践仍应确保它们不会造成伤害。
我的 REST API 仅供我们自己的移动应用程序使用,它还有一些受限端点供管理员使用 UI。通过观察移动应用程序的通信很容易获得切入点。从那里,恶意用户很容易使用 HATEOAS 发现所有可能的端点。
即使 API 受到 Spring 安全性的适当保护,也存在已知的安全漏洞,例如 https://jira.spring.io/browse/DATAREST-1144,允许修改只读数据。
在开发过程中,HATEOAS 很有用,但我想在生产中禁用它,以便更难发现端点。
而不是禁用 HATEOAS(您的应用程序应该使用它来查找端点!)您应该相信您的安全层会尽力而为。
这里有一些注意事项:
- 将用户授权添加到您的管理端点。也许您可以使用现有的 API 关键基础设施来实现这一目标。
- 将管理端点移动到一个单独的、受保护的 API
这些建议都不是快速修复,但我不建议禁用 HATEOAS。一旦它消失了,您将找到您需要的问题。
您提出的解决方案意味着您打算依靠 Security through Obscurity 来保护您的管理功能。这是一个坏主意,因为恶意行为者仍然可以 猜测 他们不应该访问的相关功能,或者只是记住他们通过遍历 link 层次结构学到的东西当你最后一次暴露它时。
你绝对应该实施一个强大的身份验证和授权机制来保护你的资源,然后即使坏人可以通过未受保护资源的 links 结构发现到那些受保护资源的路由,他们将无法访问它们。链接 意味着 会被发现,即使它们被不适合它们的人发现,安全最佳实践仍应确保它们不会造成伤害。