【问题标题】:CORS security with mobile apps移动应用程序的 CORS 安全性
【发布时间】:2017-06-24 23:20:34
【问题描述】:

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

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

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

我找到的所有解决方案都告诉我允许所有来源:*,但这对我们的 API 来说将是一个重大的安全故障。

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

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

谢谢!

【问题讨论】:

  • 我怀疑你是否可以为 origin 设置 null ?即使保留原点:*,也有多种方式/API 可用于保护您的 API

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


【解决方案1】:

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

如果你这样做了,那么你就允许来自 any 非 http/https 源的 JavaScript 代码的请求——这包括任何从 file:// 甚至 data: 运行任何东西的人网址。

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


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

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

基本安全 CORS 协议设置

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

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

Access-Control-Allow-Origin: *

即使一个资源暴露了基于 cookie 或 HTTP 认证的附加信息,使用上面的 header 也不会暴露它。它将与XMLHttpRequest 等API 共享资源,就像它已经与curlwget 共享一样。

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

【讨论】:

  • 感谢您的回答,确实它会允许 file:// 和 data:// 但它仍然会阻止其他站点向我们的 API 发送请求。我们需要这种安全性的原因再次是:防止网站中的恶意脚本发送大量请求。因此我们需要 CORS 限制,但这不是 CORS 的目的吗?我的意思是,接受* 作为允许的来源根本不安全,对吧?
  • 如果您的 API 是可公开访问的,那么您实际上已经允许来自任何地方的请求——因为所有非浏览器工具都可以向其发送任意数量的请求。所以你唯一限制的是浏览器。 CORS 不会阻止我使用 curl 或其他任何方式编写恶意 shell 脚本来向您的 API 发送大量请求。或者从僵尸网络上的 N 台不同机器上运行该脚本。等等。因此,如果您最担心的是收到大量请求,那么 CORS 在缓解这种情况方面根本就没有真正的效果。
  • 不好的建议;我们遇到了这个问题,不允许任何网站交叉引用我们的独家客户视频(来自问答电视节目的解决方案视频),因为它们只是我们客户的许可;我们不关心任何本机/脚本上下文,因为 CORS 无论如何都不能防止这种情况发生CORS 的用例设计,以及为什么 webview-in-app 方法处于劣势,没有 Access-Control-Allow-Origin: null
【解决方案2】:

正如sideshowbarker 的回答中所指出的,如果可以在浏览器上下文中打开应用程序,则不能认为使用Access-Control-Allow-Origin: null 是安全的。但是,对于在其自己的专用 Web 视图中运行的应用程序,它不会带来安全风险。

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

【讨论】:

  • 感谢您的回答,我们将暂时实施```null`,看看是否能找到解决方法
猜你喜欢
  • 2016-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
相关资源
最近更新 更多