保护不需要身份验证的 API 的方法,只能从一个预定义的使用者调用

Ways to secure API that do not require authentication, to be called only from one pre-defined consumer

提问人:john bowlee 提问时间:12/11/2022 最后编辑:sideshowbarkerjohn bowlee 更新时间:12/11/2022 访问量:717

问:

我目前开发了一个后端应用程序,它具有一些重要的功能。我想从前端使用后端终结点,但我想确保只有前端终结点调用后端终结点,而不调用其他终结点。目前,任何访问我的网络应用程序的人都可以利用这些功能(我不需要任何用户注册或身份验证)。

我怎样才能确保我的后端不会被其他可能的恶意攻击者调用,这些攻击者可能会试图窃取我的后端功能?

我读过其他一些关于如何保护不需要用户身份验证的后端应用程序的解决方案的帖子,但没有一个有精确和安全的方法。有人说启用 CORS,但根据我的经验,我可以说 CORS 可以在一个简单的浏览器插件的帮助下轻松操作。(不说根本不考虑它的移动应用程序)

如果 Web 前端应用程序、移动应用程序和其他后端系统会尝试调用我的 API 以及如何阻止它们,我将不胜感激。

安全 同源策略 Web 安全 客户端攻击

评论

0赞 root 12/11/2022
这回答了你的问题吗?有没有办法保护公共终结点?

答:

0赞 WoJ 12/11/2022 #1

典型的前端身份验证是最好的(OpenID 等)。

如果需要其他内容,可以在后端检查查询中是否发送了具有特定令牌的特定标头。如果不是,则发回 401 HTTP 代码

这要求您的客户以某种方式获得该令牌(可能通过一些注册过程),然后长期保留它(它可以存储在其中,但在清理浏览器时可能会丢失)LocalStorage

OWASP 身份验证是一个很好的信息来源。

评论

0赞 john bowlee 12/11/2022
非常感谢您的回复,但向该客户端颁发令牌并将其保存到 LocalStorage 是不安全的,任何人都可以提取它,因为前端代码向用户公开,他们可以使用相同的令牌从另一个客户端调用
0赞 WoJ 12/11/2022
@johnbowlee我不确定我是否理解。存储在 API 中的令牌在访问您的 API 的用户的浏览器之外不可用。它不能被“提取”。前端代码显然是向所有人公开的(它是在浏览器中运行的),但这并不能使特定用户的内容可用。LocalStorageLocalStorage
0赞 john bowlee 12/11/2022
是的,不是,但作为用户,您可以看到保存在本地存储中的令牌是什么,您可以使用它从您创建的另一个使用者进行调用。
0赞 WoJ 12/11/2022
@johnbowlee啊,是的,当然。但在这种情况下,你不能依赖属于用户的任何内容,因为它总是可以被伪造的。您需要使用他们无法控制的东西,例如 IP 范围。如果用户知道该身份验证,则不可能具有无法重播的前端身份验证。
0赞 john bowlee 12/11/2022
好的,我们可以使用 IP 进行一些控制,但是在移动应用程序的情况下我们可以采取什么行动。他们是否附加了任何 IP?