为什么必须添加`NSAppTransportSecurity`并将`NSAllowsArbitraryLoads`键添加到`YES`?

时间:2015-10-20 10:52:58

标签: uiwebview nsurlconnection info.plist nsapptransportsecurity

在早些时候,每当我想要检索数据时,都不需要在NSAppTransportSecurity中添加NSAllowsArbitraryLoadsYES密钥设置为info.plist,但现在,如果您是要通过网络运行你的应用程序,然后必须添加它。

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

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:7)

在将您的应用程序连接到网络时,iOS9引入了

App Transport Security 作为附加安全功能。

来自Apple的文档:

  

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

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

如果您使用的服务不是通过HTTPS提供的,您仍然可以通过覆盖App Transport Security来使用它。这就是NSAppTransportSecurity文件中的Info.plist字典的用途。在那里,您可以定义要覆盖的App Transport Security要求。

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

如果要连接到不使用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,所以它为您提供了允许不安全连接的机会。最好只在您需要的地方使用这些安全覆盖。