【问题标题】:Custom scheme/protocol access from SSL?从 SSL 访问自定义方案/协议?
【发布时间】:2023-03-27 15:45:02
【问题描述】:

我们的 iOS 应用程序使用自定义协议 (NSURLProtocol) 来直接管理加载 UIWebview 所需的某些数据。这在带有 XCode 7 的 iOS 9 之前一直运行良好。

现在,由于主站点是使用HTTPS加载的,所以UIWebview在引用自定义协议资源时会抛出错误,因为它认为它不安全(其实不是,我们使用SSL加载它,只是不是https:/ /)。该应用程序已经使用“允许任意加载”构建,因为我们还有其他一些需要这样做的东西,而且我原以为这继承了 NSTemporaryThirdPartyExceptionAllowsInsecureHTTPLoads,这似乎正在与它发生冲突,但谁知道呢。

有什么方法可以让 iOS 9 相信我们的自定义协议可以从 HTTPS 访问?注意 - 我们不在 UIWebview 中使用 iframe 或类似的东西 - 这些资源是使用 Ajax/XHR 请求的,并且应用程序的 NSURLProtocol 被调用并接管加载数据并返回响应。

自定义方案也列在 URL 类型中,但这似乎并没有改变任何行为(进出,同样的错误)。这是具体的错误:

[阻止]https://example.com/path/redacted 的页面不允许显示来自 mycustomprotocol://different.example.com/path/redacted 的不安全内容。

编辑: 下载了 Xcode 6.4,重新构建了应用程序,它似乎在 iOS 9.x 上运行良好,自定义协议没有问题。 显然,这是不是一个长期的解决方案。希望有人仍然对如何在 Xcode 7+ 中解决有所了解。

【问题讨论】:

  • 你解决了问题还是找到了有用的东西?

标签: https uiwebview ios9 nsurlprotocol


【解决方案1】:

我怀疑,问题在于 https 提供的网页通常不允许包含从其方案不在已知安全方案的特定列表中的任何 URL 加载的资源(至少在较新的浏览器中)。

解决此问题的最佳方法是将资源 URL 重写为以 https: 开头,并使它们都位于您拥有的特定子域中,并永久禁止对该子域的任何实际 Web 使用,然后将其用于确定您的 URL 协议是否应该处理 URL,而不是使用 URL 方案。

话虽如此,提交错误并请求 API 将您的自定义协议列入 UIWebView 和 WKWebView 中的“潜在安全”白名单。在这种情况下,这样做是合理的。

有关混合内容的更多信息,请参阅http://www.w3.org/TR/mixed-content/

【讨论】:

    猜你喜欢
    • 2020-02-09
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 2019-09-27
    • 2011-01-30
    相关资源
    最近更新 更多