移动应用程序的CORS安全性

Vin*_*els 42 api mobile cors cordova hybrid-mobile-app

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

Access-Control-Allow-Origin : http://myonlinesite.com
Run Code Online (Sandbox Code Playgroud)

但我们还需要此API才能访问我们的移动应用(Android + iOs).

我发现的所有解决方案都告诉我允许所有来源:*但这对我们的API来说是一个很大的安全性失败.

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

有没有更有趣的解决方案呢?

谢谢!

sid*_*ker 21

所以我们考虑将null添加到允许的原点.它更好,因为它会阻止所有其他网站试图获取我们的API,但它将允许任何移动应用程序获取它...

好吧,如果你这样做,那么你允许来自任何非http/https源的JavaScript代码的请求- 包括从一个file://或甚至data:URL 运行任何东西的任何人.

因此,如果您出于"安全"原因使用限制性CORS策略,那么使用Access-Control-Allow-Origin: null标头发送响应听起来是个糟糕的主意.


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

您没有解释为什么您已经确定它将是一个安全性故障,或者为什么您需要有一个限制性的CORS策略.但除非(1)您的Web服务器在Intranet中运行或在其他类型的防火墙后面运行,并且(2)仅通过IP身份验证限制对资源的访问,因此您无法通过使用限制性CORS策略获得任何收益.要引用规范:

基本安全的CORS协议设置

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

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

Access-Control-Allow-Origin: *
Run Code Online (Sandbox Code Playgroud)

即使资源基于cookie或HTTP身份验证公开了其他信息,使用上述标头也不会显示它.它将与API共享资源XMLHttpRequest,就像它已经curl和它共享一样wget.

因此,换句话说,如果一资源不能从连接到使用网络的随机设备访问curlwget上述报头不被包括在内.但是,如果可以访问它,那么这样做是完全可以的.

  • 如果您的API可公开访问,那么您实际上已经允许来自任何地方的请求ー因为所有非浏览器工具都可以根据需要向其发送尽可能多的请求.所以你唯一限制的是浏览器.CORS不会阻止我使用curl或任何向您的API发送大量请求的恶意shell脚本.或者从僵尸网络上的N个不同机器运行该脚本.等等.因此,如果您最大的担忧是获得大量请求,那么CORS在减轻这一点方面根本不是真正有效的. (8认同)
  • thx为你的答案,实际上它将允许file://和data://但它仍然阻止其他网站向我们的API发送请求.我们之所以需要这种安全性,又是:防止网站发送大量请求的恶意脚本.因此我们需要CORS限制,但它不是CORS的目的吗?我的意思是,根本不接受```````作为允许的原点,对吧? (2认同)