1

在早期,每当我想检索数据时,都不需要添加NSAppTransportSecurityset NSAllowsArbitraryLoadskey to YESin info.plist,但现在如果您要通过网络运行您的应用程序,则必须添加它。

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

有人可以帮忙吗?

4

1 回答 1

7

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

来自 Apple 的文档:

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

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

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

例如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,所以它为您提供了允许不安全连接的机会。仅在您需要它们的地方使用这些安全覆盖是一种很好的做法。

于 2015-10-20T16:51:37.943 回答