Cordova IOS9ATS:基于HTML5的应用程序呢?

Cordova IOS9ATS:基于HTML5的应用程序呢?,cordova,https,sencha-touch,ios9,Cordova,Https,Sencha Touch,Ios9,根据苹果公司的文档,苹果公司强制在iOS 9中使用HTTP上的HTTPS 应用程序传输安全性 应用程序传输安全性(ATS)允许应用程序向其Info.plist文件添加声明,以指定需要安全通信的域。ATS可防止意外泄露,提供安全的默认行为,且易于采用。无论您是在创建新应用程序还是在更新现有应用程序,都应尽快采用ATS 如果你正在开发一个新的应用程序,你应该只使用HTTPS。如果你有一个现有的应用程序,你现在就应该尽可能多地使用HTTPS,并尽快创建一个迁移其余应用程序的计划 这对web应用程序,特

根据苹果公司的文档,苹果公司强制在iOS 9中使用HTTP上的HTTPS

应用程序传输安全性

应用程序传输安全性(ATS)允许应用程序向其Info.plist文件添加声明,以指定需要安全通信的域。ATS可防止意外泄露,提供安全的默认行为,且易于采用。无论您是在创建新应用程序还是在更新现有应用程序,都应尽快采用ATS

如果你正在开发一个新的应用程序,你应该只使用HTTPS。如果你有一个现有的应用程序,你现在就应该尽可能多地使用HTTPS,并尽快创建一个迁移其余应用程序的计划


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

如果您不确定应用程序将连接哪个URL,或者如果您连接到多个URL,则可以通过在info.plist文件中添加以下键绕过ATS(应用程序传输安全)

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

如何在iOS9中处理SSL,一种解决方案是:

俗话说:

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

<key>NSAppTransportSecurity</key> 
<dict>
    <key>NSAllowsArbitraryLoads</key> <true/> 
</dict>
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>
NSAppTransportSecurity
NSExceptionDomains
yourserver.com
n包括多个域
NSTemporary ExceptionalLowsInSecureHttpLoads
NSTemporaryExceptionMinimumTLSVersion
TLSv1.1
如果您的应用程序(例如,第三方web浏览器)需要连接到任意主机,则可以如下配置:

<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>
NSAppTransportSecurity
NSAllowsArbitraryLoads
如果您必须这样做,那么最好更新您的服务器以使用TLSv1.2和SSL,如果它们还没有这样做的话。这应被视为临时解决办法

到目前为止,预发布文档没有以任何特定的方式提及这些配置选项。一旦完成,我将更新答案以链接到相关文档

这里有一个

试试这个:
cordova插件添加https://github.com/robertklein/cordova-ios-security.git

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

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

苹果实际上并不强制任何东西,他们只是有一个默认的框架设置,从而为应用程序及其服务的用户带来更大的安全性。这意味着,在混合工具将细节集成到现有产品中之前,需要进行调整。在花时间解决这个问题之后,我建议首先在本地开发,允许任意负载并绕过ATS。如果AppStore审批需要ATS,一旦您准备好开始对更多用户组进行测试,请打开ATS(并明确关闭任意加载),然后根据需要将异常调整为默认设置。对于每个域,要问的主要问题是是否允许子域,根据需要调整TLS版本,以及是否还允许不安全的http。我的应用程序有20个左右的域,目的是将其他请求传递给其他应用程序。如果是web浏览器,我会为我的服务设置特定的设置(我控制和知道),并允许其他设置任意。

作为提示-如果您正在开发混合应用程序(例如cordova)如果您在LocalHost上进行测试,那么您可能需要添加此项。是否有推荐的方法在cordova应用程序中添加此项?我现在的做法是在生成的xcode项目中打开plist文件,但我认为您可以从config.xml中执行此操作,我还没有尝试此方法。这会在应用商店审查时导致拒绝吗??如果苹果允许这样做,那么是否存在强制要求在“NSExceptionDomains”中指定域的情况?您可以使用Cordova钩子来实现这一点。检查这个。对于任何使用Ionic和iOS9的人来说,这也解决了一个白色屏幕的死亡问题。它不适用于iOS 9.3是的,下面的答案不适用于iOS 9.3。因此,我最终得到了加载本地文件的有效解决方案: