【问题标题】:iOS App Transport Security blocking http transfer from excepted domainiOS App Transport Security 阻止来自例外域的 http 传输
【发布时间】:2016-03-21 15:29:46
【问题描述】:

我正在尝试将 ATS 配置为允许从我的域加载 http,但使用下面的 plist 设置,它仍然阻止访问图像请求(但奇怪的是,不是 http 'POST' 消息)。如果我启用 Allow Arbitrary Loads 它工作正常。获取图像的代码使用带有http://www.my-domain.com/ImageStore/aFolder/bfolder/xyz.jpg 的(例如)url 的 NSURLConnection sendAsynchronousRequest。我正在使用最新更新从模拟器运行。我找不到其他人报告类似问题......我做错了什么?

警告信息:

App Transport Security 已阻止明文 HTTP (http://) 资源加载,因为它不安全。可以通过应用程序的 Info.plist 文件配置临时例外。

info.plist 设置:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <false/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>my-domain.com</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSIncludesSubDomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
        </dict>
    </dict>

【问题讨论】:

    标签: ios app-transport-security


    【解决方案1】:

    您正确设置了 NSAppTransportSecurity 的全局设置。我已经包含了一个可以在我拥有的应用程序中运行的版本。

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>my-domain.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
        </dict>
    </dict>
    

    来自 iOS 9.0 的发行说明

    App Transport Security

    应用传输安全 (ATS) 强制执行安全的最佳实践 应用程序与其后端之间的连接。 ATS 防止意外 披露,提供安全的默认行为,并且易于采用;它 在 iOS 9 和 OS X v10.11 中也默认开启。你应该采用 ATS 尽快,无论您是否正在创建新应用程序 或更新现有的。

    如果您正在开发新应用,则应仅使用 HTTPS。如果 你有一个现有的应用程序,你应该尽可能多地使用 HTTPS 现在,并创建一个迁移应用程序其余部分的计划 尽快。此外,您通过更高级别的通信 API 需要使用具有前向保密性的 TLS 1.2 版进行加密。 如果您尝试建立不符合此要求的连接, 抛出错误。如果您的应用需要向不安全的 域,您必须在应用的 Info.plist 文件中指定此域。

    Apple's WWDC video 在 Networking with NSURLSession 中也提到了 ATS

    【讨论】:

    • 感谢您确认设置正确。所以我做了进一步的测试,5s 9.2、6+ 9.2 模拟器使用上述设置阻止了访问。我还尝试从另一个域 (freeimageslive.com) 加载图像并得到相同的结果。
    猜你喜欢
    • 2015-11-30
    • 2016-01-24
    • 2016-04-17
    • 2018-12-24
    • 2016-11-26
    • 2015-12-20
    • 2015-12-11
    • 2017-07-31
    • 2016-10-13
    相关资源
    最近更新 更多