【问题标题】:Why does one have to add `NSAppTransportSecurity` and add the `NSAllowsArbitraryLoads` key to `YES`?为什么必须添加`NSAppTransportSecurity`并将`NSAllowsArbitraryLoads`键添加到`YES`?
【发布时间】:2016-01-18 23:57:45
【问题描述】:

在早期,每当我想检索数据时,不需要在info.plist 中添加NSAppTransportSecurityNSAllowsArbitraryLoads 键添加到YES,但是现在如果您要通过网络运行您的应用程序,那么它必须被添加。

为什么需要它?它如何有用?它的用途是什么?

有人可以帮忙吗?

【问题讨论】:

    标签: uiwebview nsurlconnection info.plist nsapptransportsecurity


    【解决方案1】:

    App Transport Security 是在 iOS9 中引入的,作为将您的应用连接到网络时的一项附加安全功能。

    来自 Apple 的文档:

    App Transport Security 是一项可提高应用程序安全性的功能 应用程序和 Web 服务之间的连接。该功能包括 符合最佳实践的默认连接要求 安全连接。应用程序可以覆盖此默认行为并转 关闭运输安全。

    其中一项要求是所有连接都必须使用 HTTPS。这就是为什么所有仅使用 HTTP 的连接在 iOS9 上都会失败的原因。

    如果您使用的服务无法通过 HTTPS 访问,您仍然可以通过覆盖应用传输安全性来使用它。这就是 Info.plist 文件中的 NSAppTransportSecurity 字典的用途。您可以在此处定义要覆盖的应用传输安全要求。

    例如NSAllowsArbitraryLoads 禁用任何域的所有安全要求。您可以在 NSExceptionDomains 字典中定义例外,但如果您不这样做,则将允许所有域在没有应用传输安全性的情况下连接到您的应用。

    当您想连接到不使用 HTTPS 的单个域时,您不应使用 NSAllowsArbitraryLoads,因为这会禁用 所有 所有 域的安全性。相反,您应该专门覆盖仅针对这一域的 HTTPS 要求。

    您可以在 Info.plist 文件中这样做:

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>yourdomain.com</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
        </dict>
    </dict>
    

    总结一下:App Transport Security 是一件好事,因为它鼓励您使用比普通 HTTP 连接更安全的 HTTPS 连接。因为您不能总是使用 HTTPS,所以它为您提供了允许不安全连接的机会。最好只在您需要的地方使用这些安全覆盖。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多