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

问题描述:

在早些时候,无论何时我想要检索数据,都不需要添加NSAppTransportSecurityNSAllowsArbitraryLoads键设置为YES,info.plist,但现在如果要通过网络运行您的应用程序,则必须添加它。为什么必须添加`NSAppTransportSecurity`并将`NSAllowsArbitraryLoads`键添加到`YES`?

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

任何人都可以帮忙吗?

应用运输安全与iOS9一起引入,作为将应用连接到网络时的附加安全功能。

从苹果公司的文档:

应用传输安全是一项功能,提高了应用程序和Web服务之间的连接 的安全性。该功能由 默认连接要求组成,符合 安全连接的最佳做法。应用可以覆盖此默认行为,并关闭传输安全性 。

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

如果您使用的服务不是通过HTTPS提供的,您仍然可以通过覆盖App Transport Security来使用它。这就是你的Info.plist文件中的NSAppTransportSecurity字典所用的。在那里您可以定义您希望覆盖哪个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> 

综上所述东西:应用程序传输安全性是一件好事,因为它鼓励你使用HTTPS连接,这比普通的HTTP更安全连接。因为你不能总是使用HTTPS,所以它给你提供了允许不安全连接的机会。仅在需要它们的地方使用这些安全覆盖是一个很好的做法。

+0

谢谢... @joern – VRAwesome