【问题标题】:App Transport Security issue in iOS 9 and iOS 10iOS 9 和 iOS 10 中的应用程序传输安全问题
【发布时间】:2017-03-09 22:06:21
【问题描述】:

Apple 已宣布NSAllowArbitraryLoads 很快将无法使用。因此,在 iOS 10 中,我的 info.plist 中有这个:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>myAPIdomain</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
        </dict>
        <key>NSAllowsArbitraryLoadsInWebContent</key>
        <true/>
    </dict>

这适用于我的 API 请求和 UIWebView 中的内容。但是,在 iOS9 中,不支持 NSAllowsArbitraryLoadsInWebContent,建议包含 NSAllowsArbitraryLoads 以支持 iOS 9。但我认为这会覆盖我的NSExceptionDomains 设置?如何让我的 API 和 UIWebView 的 HTTP 请求同时在 iOS 9 和 iOS 10 上工作并且仍然遵循 Apple 的规则?

编辑

为了支持 iOS 9 和 iOS 10:

<key>NSAppTransportSecurity</key>
        <dict>
            <key>NSExceptionDomains</key>
            <dict>
                <key>myAPIdomain</key>
                <dict>
                    <key>NSIncludesSubdomains</key>
                    <true/>
                    <key>NSExceptionAllowsInsecureHTTPLoads</key>
                    <true/>
                </dict>
            </dict>
            <key>NSAllowsArbitraryLoadsInWebContent</key>
            <true/>
            <key>NSAllowsArbitraryLoads</key>
            <true/>
        </dict>

【问题讨论】:

  • 如果您支持比 iOS 10 更早的版本,那么您需要使用 NSAllowsArbitraryLoads,是的,这将适用于 iOS 9 和 10。您只需在评论说明中包含为什么需要 @ 987654328@ 如果您有特定域知道 https 可以工作,您可以为这些域添加例外以启用 https
  • @Paulw11感谢您的快速回复。这意味着我只需要将NSAllowsArbitraryLoadsInWebContentNSAllowsArbitraryLoads 添加到我的info.plist 中?
  • 是的,没错
  • @Paulw11我已经编辑了帖子。我认为在 iOS10 上,密钥 NSAllowsArbitraryLoadsInWebContentNSExceptionDomains 将起作用。在 iOS 9 上,NSAllowsArbitraryLoads 可以工作。我说的对吗?
  • 我相信 NSAllowsArbitraryLoads 即使在 iOS 10 上也会覆盖 NSAllowsArbitraryLoadsInWebContent,因此 ATS 在 iOS 9 和 iOS 10 设备上实际上会“关闭”

标签: ios


【解决方案1】:
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

如果您不想支持 https(TLS 1.2),可以使用上述条件。但是你必须确保它是一个临时修复。从 2017 年初开始,Apple 强制使用 https (TLS 1.2)

【讨论】:

  • 这不是真的。您将能够继续使用NSAllowsArbitraryLoads,但您需要解释为什么需要它
  • 我知道Apple将从2017年开始严格使用NSAllowsArbitraryLoads。但我也想支持iOS 9。似乎必须需要NSAllowsArbitraryLoads 才能支持 iOS 9。
  • 另外还有很多设备,例如嵌入式/物联网设备,永远不会支持 TLS
猜你喜欢
  • 2016-06-07
  • 2016-01-05
  • 2016-01-17
  • 2016-08-27
  • 2015-09-17
  • 2015-12-28
  • 2016-01-02
  • 1970-01-01
  • 2016-05-16
相关资源
最近更新 更多