iOS9 ATS:基于 HTML5 的应用程序怎么样?

iOS9 ATS: what about HTML5 based apps?

根据 https://developer.apple.com/library/content/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html#//apple_ref/doc/uid/TP40016198-SW14 的文档,Apple 强制在 iOS 9.

中使用 HTTPS over HTTP

App Transport Security

App Transport Security (ATS) lets an app add a declaration to its Info.plist file that specifies the domains with which it needs secure communication. ATS prevents accidental disclosure, provides secure default behavior, and is easy to adopt. You should adopt ATS as soon as possible, regardless of whether you’re creating a new app or updating an existing one.

If you’re developing a new app, you should use HTTPS exclusively. If you have an existing app, you should use HTTPS as much as you can right now, and create a plan for migrating the rest of your app as soon as possible.

这对网络应用程序意味着什么,特别是。 Sencha Touch 和基于 Cordova/PhoneGap 的?我的 Web 应用程序可以配置为 any 服务器地址,因此我无法将它们列入 plist 文件的白名单。这是否仅适用于使用本机请求(通过 NSURLRequest 等)的应用程序?

如果您不确定您的应用程序将连接哪个 URL,或者如果您连接到许多 URL,您可以通过在 info.plist 文件.

<key>NSAppTransportSecurity</key> 
<dict>
    <key>NSAllowsArbitraryLoads</key> <true/> 
</dict>

如何处理iOS9中的SSL,一种解决方法是:

正如 Apple 所说:

iOS 9 和 OSX 10.11 要求您计划从中请求数据的所有主机使用 TLSv1.2 SSL,除非您在应用的 Info.plist 文件中指定例外域。

Info.plist 配置的语法如下所示:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow insecure HTTP requests-->
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.1</string>
    </dict>
  </dict>
</dict>

如果您的应用程序(例如第三方网络浏览器)需要连接到任意主机,您可以这样配置:

<key>NSAppTransportSecurity</key>
<dict>
    <!--Connect to anything (this is probably BAD)-->
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

如果您必须这样做,最好更新您的服务器以使用 TLSv1.2 和 SSL(如果它们尚未这样做的话)。这应该被视为临时解决方法。

截至今天,预发布文档没有以任何特定方式提及任何这些配置选项。完成后,我会将 link 的答案更新到相关文档中。

这是一个Demo(Demo1)

试试这个: cordova plugin add https://github.com/robertklein/cordova-ios-security.git

它会在构建过程中将以下部分添加到 *-Info.plist 文件中:

<key>NSAppTransportSecurity</key> 
<dict>
  <key>NSAllowsArbitraryLoads</key> <true/> 
</dict>

Apple 实际上并没有强制执行任何操作,他们只是将框架设置为默认设置,从而为应用程序及其服务用户的利益鼓励更高的安全性。这意味着,在混合工具将细节集成到现有产品之前,需要对 进行调整。在花时间解决这个确切的问题之后,我建议首先在本地开发允许任意负载并绕过 ATS。如果应用商店批准需要 ATS,一旦您准备好开始与更广泛的用户组进行测试,请打开 ATS(并明确关闭任意负载),然后根据需要将例外情况调整为默认设置。每个域要问的主要问题是是否允许子域,根据需要调整 TLS 版本,以及是否也允许不安全的 http。我的应用程序有 20 个左右的域,目的是将其他请求传递给其他应用程序。如果它是一个网络浏览器,我会为我的服务(我控制和知道的)设置特定的设置,并允许其余的是任意的。