gpt4 book ai didi

rest - 如何使用 CORS 保护 REST API?

转载 作者:行者123 更新时间:2023-12-04 12:17:48 24 4
gpt4 key购买 nike

我正在开发一个 Web 应用程序,其中前端和各种客户端(curl & co.)都可以通过 REST API 访问数据。前端和后端都将在同一个域中。我想用 CORS 保护我的前端,这让我进退两难。如果我设置 Access-Control-Allow-Origin*那么所有其他客户端将能够访问 API,但我自己的前端将更加暴露。另一方面,将其设置为我的域会强制客户提供(假)Origin header 并有效地禁止使用浏览器作为客户端(通过不同域上的前端)。

这通常是如何解决的?我应该为 API 使用两个不同的端点,一个用于公共(public)访问,另一个用于我的前端?我会很感激一些建议。

最佳答案

I would like to protect my frontend with CORS



CORS 不保护前端的任何内容,CORS 是一种防止未经授权的网站跨站点脚本编写的方法。 CORS header 仅对浏览器的 XHR 调用有效。它不会阻止直接加载资源。

If I set Access-Control-Allow-Origin to * then all other clients will be able to access API, but my own frontend will be more exposed.



恕我直言,您的前端将可以像以前一样访问。 CORS header 仅对浏览器的 XHR 调用有效

On the other hand setting it to my domain forces clients to supply (fake) Origin headers and effectively disallows using browsers as clients (via frontend on different domains).



并不真地。
有几种选择:
  • 您可以为每个 API 客户端提供一个允许的主机列表(有效地根据客户端的身份验证设置原始 header )这是许多 API 提供商所做的(FB、谷歌、亚马逊等)
  • 浏览器(在 XHR 调用中)发送 Origin header ,您可以检查并发送或拒绝来自 Origin header 的主机名

  • 非浏览器客户端不受 CORS header 的限制。

    Should I use two different endpoint for API, one for public access and the other for use with my frontend? I would appreciate some advice



    正如评论中所写-假设功能相同并且用户已通过身份验证,那么恕我直言,为内部/公共(public)使用提供单独的服务是没有意义的。

    这些都是针对特定问题的答案,但是我仍然不相信您想实现什么/为什么/如何实现。

    关于rest - 如何使用 CORS 保护 REST API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47932027/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com