移动应用程序的CORS安全性

时间:2017-02-07 16:04:35

标签: api cordova mobile cors hybrid-mobile-app

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

this.CancelAndCloseViewModelAsync();

但我们还需要可以通过移动应用(Android + iOs)访问此API。

我找到的所有解决方案都告诉我允许所有来源:Access-Control-Allow-Origin : http://myonlinesite.com ,但这对我们的API来说是一个很大的安全失败。

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

还有更有趣的解决方案吗?

谢谢!

2 个答案:

答案 0 :(得分:19)

  

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

如果您这样做,那么您将允许来自任何非http / https来源的JavaScript代码的请求 - 包括从file://或甚至{运行任何内容的任何人{1}}网址。

因此,如果您出于“安全”原因使用限制性CORS策略,则发送带有data:标头的响应听起来非常糟糕。

  

我们需要保持API服务器安全性与CORS限制:   我发现的所有解决方案都告诉我允许所有来源:Access-Control-Allow-Origin: null,但这对我们的API来说是一个很大的安全性失败。

您没有解释为什么您已经确定这将是一个安全性失败,或者为什么您需要一个限制性的CORS策略。但除非(1)您的Web服务器在Intranet中运行或在其他类型的防火墙后面运行,并且(2)仅通过IP身份验证限制对资源的访问,因此您不会从使用限制性CORS策略中获得任何收益。致quote the spec

  

基本安全CORS协议设置

     

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

     

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

*
     

即使资源基于cookie或HTTP身份验证公开了其他信息,使用上述标头也不会显示它。它将使用Access-Control-Allow-Origin: * 等API共享资源,就像它已与XMLHttpRequestcurl共享一样。

     

因此换句话说,如果无法使用wgetcurl从连接到网络的随机设备访问资源,则不包括上述标题。但是,如果可以访问它,那么完全没问题。

答案 1 :(得分:1)

是的,WKWebView要求您使用CORS的事实很痛苦。但是,它不会在移动应用程序的上下文中带来安全风险。

同源策略(CORS扩展)专为特定类型的威胁而设计:来自外部域的脚本,在浏览器中运行,向您的服务器发送包含您的授权cookie的请求。

关键点是浏览器中的 。如果您在WKWebView中运行应用程序,则不会有任何外部脚本能够使用您的cookie向您的服务器发出请求。现在,如果您还将其用作Web应用程序 - 也就是说,用户可以在浏览器上下文中登录并获取授权cookie,那么您将不得不采取其他措施。但我认为情况并非如此。

所以Access-Control-Allow-Origin: null应该没问题。