【问题标题】:App Transport Security NOT Working for .ninja domain names (Swift2 / XCode7)应用程序传输安全不适用于 .ninja 域名 (Swift2 / XCode7)
【发布时间】:2016-01-08 15:00:01
【问题描述】:

使用 XCode7/Swift2 并尝试加载网页时,我一直被 App Transport Security (ATS) 阻止 - 原因似乎是 ATS 不适用于 .ninja 网络扩展。

意思是,你可以为domains.com添加一个例外,你可以在webview中访问这个站点。但是,您不能为domains.ninja 添加例外,尽管这是一个有效的网址。我已经对此进行了全面测试。

现在我能够从 somewebsite.ninja 加载内容的唯一方法是,如果我在 Info.plist 文件中完全关闭 ATS(NSAppTransportSecurity > NSAllowsArbitraryLoads > YES),但我知道这不是正确的方法做事。我还担心,当我在完成后将我的应用程序提交到应用程序商店时,这可能会导致问题。

有人知道如何为 .ninja 域添加 ATS 例外吗?

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>domains.com</key>
            <dict>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
            <key>domains.ninja</key>
            <dict>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
        </dict>
    </dict>

以上内容将允许您在 web 视图中加载 domain.com 而不是 domain.ninja,即使除了域名扩展之外键/选项完全相同。

【问题讨论】:

  • 您能否显示您在 info.plist 中输入的条目以及您尝试访问的 URL?
  • 是的,刚刚编辑了答案。请注意,我只是将 espn.com 用作测试用例。我还使用不同的域名进行了测试,即somedomain.ninja,结果相同。到目前为止,唯一的方法是完全禁用 ATS
  • 对我来说 https://www.espn.ninja 无法连接并且 http://espn.ninja 是一个停放的域
  • 然后尝试任何其他 .ninja 域,它被停放并不重要。事实上,我应该使用另一个例子。试试这两个域:http://domains.ninja/http://domains.com——它们都是有效的站点。以及上面的 espn 网站(即使一个被停放它仍然有效,而且我正在使用一个有效的非停放网站进行测试)
  • “我还担心,当我将应用程序提交到应用商店时,这可能会导致问题。”会引起什么问题?任意负载是合法的。这就是它的。使用它并继续前进。并提交错误报告。这不是你的问题。苹果让自己陷入了困境。处理它是他们的工作。

标签: ios xcode ios9 xcode7 app-transport-security


【解决方案1】:

我能够将 domains.ninja 页面加载到 UIWebView 中,但我必须包含该页面引用的所有其他域 - 各种分析、CDN 和跟踪站点。

我的 info.plist 的摘录是 -

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>domains.ninja</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>www.geoplugin.net</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>marketo.net</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>googleapis.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>netdna.bootstrapcdn.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>www.google-analytics.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>mktoresp.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>gstatic.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

因此,最终,通常只关闭 ATS 并为支持 TLS 的域添加例外可能会更简单。

【讨论】:

  • 谢谢@Paulw11,这可能是因为它没有阻止我的特定 .ninja 域,而是我的页面可能引用了其他域,因此整个页面都被阻止了。无论如何,我都会完全禁用 ATS,因为它的问题太大了,我需要在我的应用程序中加载动态 Web 视图。我还没有完全测试,但这给了我洞察力
猜你喜欢
  • 2017-06-27
  • 2016-07-13
  • 2015-10-11
  • 2018-05-01
  • 2017-04-15
  • 2016-02-09
  • 2015-11-15
  • 1970-01-01
  • 2016-03-05
相关资源
最近更新 更多