我们需要保持我们的API服务器安全性与CORS限制:
this.CancelAndCloseViewModelAsync();
但我们还需要可以通过移动应用(Android + iOs)访问此API。
我找到的所有解决方案都告诉我允许所有来源:Access-Control-Allow-Origin : http://myonlinesite.com
,但这对我们的API来说是一个很大的安全失败。
我们正在使用Cordova构建我们的应用程序,WebView为其提供本地文件,因此发送:*
,用于其所有http(s)请求。因此,我们正考虑将origin: null
添加到允许的来源。它更好,因为它会阻止所有其他网站试图获取我们的API,但它将允许任何移动应用程序获取它...
还有更有趣的解决方案吗?
谢谢!
答案 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共享资源,就像它已与XMLHttpRequest
和curl
共享一样。因此换句话说,如果无法使用
wget
和curl
从连接到网络的随机设备访问资源,则不包括上述标题。但是,如果可以访问它,那么完全没问题。
答案 1 :(得分:1)
是的,WKWebView
要求您使用CORS的事实很痛苦。但是,它不会在移动应用程序的上下文中带来安全风险。
同源策略(CORS扩展)专为特定类型的威胁而设计:来自外部域的脚本,在浏览器中运行,向您的服务器发送包含您的授权cookie的请求。
关键点是浏览器中的 。如果您在WKWebView
中运行应用程序,则不会有任何外部脚本能够使用您的cookie向您的服务器发出请求。现在,如果您还将其用作Web应用程序 - 也就是说,用户可以在浏览器上下文中登录并获取授权cookie,那么您将不得不采取其他措施。但我认为情况并非如此。
所以Access-Control-Allow-Origin: null
应该没问题。