web-dev-qa-db-fra.com

iOS9 ATS: qu'en est-il des applications basées sur HTML5?

Selon la documentation de https://developer.Apple.com/library/content/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html#//Apple_ref/doc/uid/TP40016198-SW14 , forces de Apple à utiliser HTTPS sur HTTP dans iOS 9.

Sécurité du transport d'applications

ATS (App Transport Security) permet à une application d'ajouter une déclaration à son fichier Info.plist qui spécifie les domaines avec lesquels elle a besoin d'une communication sécurisée. ATS empêche la divulgation accidentelle, offre un comportement par défaut sécurisé et est facile à adopter. Vous devez adopter ATS dès que possible, que vous créiez une nouvelle application ou que vous en mettiez à jour une existante.

Si vous développez une nouvelle application, vous devez utiliser exclusivement HTTPS. Si vous avez une application existante, vous devez utiliser autant que possible HTTPS et créer un plan pour migrer le reste de votre application dès que possible.

Qu'est-ce que cela signifie pour les applications Web, en particulier Sencha Touch et ceux basés sur Cordova/PhoneGap? Mon application Web peut être configurée pour toute adresse de serveur, il est donc impossible de les ajouter à la liste blanche dans un fichier Plist. Cela ne s'appliquera-t-il qu'aux applications utilisant des requêtes natives (via NSURLRequest, etc.)?

28
Dennis

Si vous ne savez pas quelle URL votre application va connecter ou si vous vous connectez à plusieurs URL, vous pouvez contourner l'ATS (App Transport Security) en ajoutant les clés suivantes dans le fichier info.plist.

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

Essayez ceci: cordova plugin add https://github.com/robertklein/cordova-ios-security.git

Il ajoutera la partie suivante au fichier *-Info.plist au cours du processus de construction:

<key>NSAppTransportSecurity</key> 
<dict>
  <key>NSAllowsArbitraryLoads</key> <true/> 
</dict>
17
robert.little

Comment gérer le protocole SSL dans iOS9 , Une solution consiste à ressembler à ceci:

En tant que Apple dire: enter image description hereenter image description here

enter image description here

iOS 9 et OSX 10.11 requièrent le protocole SSL TLSv1.2 pour tous les hôtes à partir desquels vous prévoyez de demander des données, à moins que vous ne spécifiiez des domaines d'exception dans le fichier Info.plist de votre application.

La syntaxe de la configuration Info.plist ressemble à ceci:

<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>

Si votre application (un navigateur Web tiers, par exemple) doit se connecter à des hôtes arbitraires, vous pouvez la configurer comme suit:

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

Si vous devez le faire, il est probablement préférable de mettre à jour vos serveurs pour qu'ils utilisent TLSv1.2 et SSL, s'ils ne le font pas déjà. Cela devrait être considéré comme une solution de contournement temporaire.

À ce jour, la documentation de la pré-version ne mentionne aucune de ces options de configuration de manière spécifique. Une fois que ce sera fait, je mettrai à jour la réponse pour créer un lien vers la documentation pertinente.

Voici un Demo (Demo1)

7
ElonChan

En fait, Apple ne force rien, ils ont simplement une configuration de cadre à utiliser par défaut et encouragent ainsi une sécurité accrue au profit de l'application et des utilisateurs de ses services. Cela signifie que, jusqu'à ce que l'outillage hybride intègre les détails dans les produits existants, des ajustements doivent être apportés aux fichiers de configuration appropriés, avec une certaine compréhension des détails (voir réponse liée + commentaire ci-dessous) . Après avoir passé du temps avec ce problème précis, je suggère de commencer par développer localement en permettant des charges arbitraires et en contournant ATS. Si ATS est nécessaire pour l'approbation de la boutique d'applications, une fois que vous êtes prêt à commencer les tests avec un groupe d'utilisateurs plus large, activez-le (et chargez explicitement de manière arbitraire), puis réglez les exceptions sur les paramètres par défaut selon vos besoins. La principale question à poser pour chaque domaine est de savoir s'il faut autoriser les sous-domaines, ajuster les versions de TLS en fonction des besoins et autoriser également les connexions http non sécurisées. Mon application a environ 20 domaines avec l'intention de transmettre d'autres demandes à d'autres applications. S'il s'agissait d'un navigateur Web, j'aurais des paramètres spécifiques pour mes services (que je contrôle et connais) et je permettais au reste d'être arbitraire.

0
jimmont