当前位置: 首页 > 知识库问答 >
问题:

使用“访问控制允许来源:*”(通配符)的CORS安全性

惠文彬
2023-03-14

我们需要通过CORS限制来保持我们的API服务器安全性:

Access-Control-Allow-Origin : http://myonlinesite.com

但是我们也需要这个API能够被我们的移动应用程序(Android iOs)访问。

我找到的所有解决方案都告诉我允许所有来源:< code>*,但这对我们的API来说是一个很大的安全失败。

我们正在使用Cordova构建我们的应用程序,WebView为本地文件提供服务,因此为所有http(s)请求发送:< code>origin: null。因此,我们正在考虑将< code>null添加到允许的原点。这样更好,因为它会阻止所有其他试图获取我们API的网站,但它会允许任何移动应用程序获取它...

对此还有什么更有趣的解决方案吗?

谢谢!

共有2个答案

呼延宪
2023-03-14

正如sideshowbarker的回答中指出的,如果应用程序可以在浏览器环境中打开,则使用< code > Access-Control-Allow-Origin:null 不能被视为安全。然而,对于在自己专用的网络视图中运行的应用程序来说,它不会带来安全风险。

同源策略(CORS扩展的)是为一种特定的威胁而设计的:一个来自外部域的脚本,在浏览器中运行,向你的服务器发送一个包含你的授权cookies的请求。但是,如果您在专用的< code>WKWebView中运行您的应用程序,那么将不会有任何外来脚本能够使用您的cookies向您的服务器发出请求

杨飞语
2023-03-14

我们需要通过CORS限制来保持API服务器的安全性:我找到的所有解决方案都告诉我允许所有来源:*,但这对我们的API来说是一个巨大的安全失败。

您没有解释为什么您确定这将是安全故障,或者为什么您需要制定限制性的 CORS 策略。但是,除非 (1) API 服务器在 Intranet 中或某种其他类型的防火墙后面运行,并且 (2) 对资源的访问仅受 IP 身份验证的限制,否则使用限制性 CORS 策略不会获得任何好处。引用规范:

对于通过 IP 身份验证或防火墙保护数据的资源(不幸的是,仍然相对常见),使用 CORS 协议是不安全的。(这就是必须发明CORS协议的原因。

但是,否则使用以下标头是安全的:

Access-Control-Allow-Origin: *

即使资源公开了基于cookie或HTTP身份验证的附加信息,使用上面的标头也不会显示它。它将与API(如XMLHttpRequest)共享资源,就像它已经与curlwget共享一样。

因此,换句话说,如果无法从使用curlwget连接到Web的随机设备访问资源,则不包含上述标头。但是,如果可以访问它,那么这样做是完全可以的。

Fetch/CORS规范的作者在一篇相关的博客文章中进行了更详细的介绍:

使用访问控制允许源来扩充任何资源是完全安全的:*只要资源不是内部网的一部分(在防火墙后面)。换句话说,您可以使用wgetcurl从互联网上的服务器获取URL。对于您的基本网站,这包括网站上的所有资源。访问控制允许源标头(CORS 的一部分)告诉浏览器资源可以共享。

即使资源在请求中包含基于 cookie 或 HTTP 身份验证数据的机密信息,包括标头和共享资源仍然是安全的,因为浏览器将在没有任何 cookie 或 HTTP 身份验证数据的情况下发出请求。如果浏览器确实使用 cookie 或 HTTP 身份验证数据发出请求,它将永远不会共享资源,因为这需要一个额外的标头、访问控制允许凭据和上述标头的不同值。

因此,请继续与其他应用程序安全地共享您的公共数据!

 类似资料:
  • 问题内容: 我试图使CORS请求正常工作。使用以下JS代码,我得到此错误: 这是JS代码: 当我使用chrome的devtools查看网络时,我发现确实没有标题。但是,当我手动加载该网站时,它就存在了! 我使用以下代码设置标题: 希望能有所帮助! 问题答案: 它说这意味着您的服务器应用程序需要调整以接受跨源请求。由于安全原因,默认情况下跨源请求不起作用。您需要启用它们。 对于django,有一个维

  • 问题内容: 我看到以下错误: 使用此代码: 是什么原因引起的,如何解决? 问题答案: 在当前域之外发出ajax请求时,Javascript是受限制的。 例1:您的域名为example.com,并且您想向test.com提出请求=>您不能。 例2:您的域名是example.com,并且您想向inner.example.com发送请求,但是您不能。 例3:您的域名为example.com:80,并且您

  • 我正在尝试将webUntis(文档)API用于学校项目。现在,我只是尝试建立与API的任何类型的连接。 此代码产生以下错误消息: 已阻止跨源请求:同一源策略禁止读取位于的外部资源https://api.webuntis.dk/api/status(原因:缺少CORS标头“访问控制允许来源”)。 这个问题可能如何解决?也许我的API密钥是错误的? 免责声明:错误消息是从德语翻译过来的。

  • 我在AngularJS中创建了一个应用程序,并尝试调用Laravel API: MyApp(AngularJS):http://localhost:8080/ API(Laravel样板文件):http://localhost:8000/ api_routes.php:

  • 我有一个网站,有一个单独的静态文件子域。我发现我需要设置标题,以使某些AJAX功能正常工作,特别是字体。我希望能够从访问静态子域进行测试,以及从子域访问静态子域。简单的解决方案是。我的服务器使用nginx。 您可能不想在响应标题中使用通配符作为,主要原因是什么?

  • 错误:我在Firefox中得到以下内容:外国站点查询被阻止:同源策略不允许读取远程资源http:// localhost:8080 / api / v1 / post /。(原因:“访问控制-允许-源”CORS 标头不存在) 我已经花了几个小时允许CORS与我的Spring Boot服务器通信,以使我的REACT UI与服务器通信。关于堆栈溢出,有许多措辞类似的问题,但建议的解决方案中没有一个解决