Comment puis-je ajouter NSAppTransportSecurity à mon fichier info.plist?

124

https://developer.apple.com/videos/wwdc/2015/?id=711 @ 5: 55

Je n'arrive pas à ajouter ceci à mon info.plist. Il n'y a aucune valeur. J'exécute XCode Version 7.0 beta (7A121l) et je teste sur iOS9.

Étant donné que je ne peux pas déclarer spécifiquement les URL que je souhaite voir dans la vidéo, je continue de recevoir "App Transport Security a bloqué une charge de ressources HTTP (http: //) en texte clair car elle n'est pas sécurisée. Des exceptions temporaires peuvent être configurées via votre application Erreurs de fichier "Info.plist".

Cependant, je ne semble pas être en mesure de le configurer. Des idées?

chris P
la source
Vous n'avez plus vraiment de question, vous devez simplement aller de l'avant et répondre à votre propre question, puis accepter après le délai approprié.
Norman H
Qu'est-ce qu'un nom de domaine ? est-ce une URL de base de serveur ou une autre? et où trouver le nom de domaine de mon application?
Nik
Le nom de domaine est l'un des termes les plus couramment utilisés. Eh bien, c'est celui qui est acheté et après l'hébergement, vous pouvez l'utiliser comme URL de base du serveur que vous utilisez pour les API. Il n'y a rien de tel que le nom de domaine de l'application. Vous pouvez donc utiliser le nom de domaine comme celui où les API sont écrites.
Ashish

Réponses:

131

essayez avec ceci --- a fonctionné pour moi dans Xcode-beta 4 7.0

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

Aussi une autre option, si vous souhaitez désactiver ATS, vous pouvez utiliser ceci:

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

Mais ce n'est pas du tout recommandé. Le serveur doit avoir les certificats SSL et éviter toute fuite de confidentialité.

Ashish
la source
J'ai XCode 7.2 (7C68) et j'ai modifié (en désactivant complètement ATS) l'info.plist de mon projet de test. Mais ça ne fonctionne pas. Un indice?
Sanandrea
généralement cela fonctionne ... pouvez-vous coller votre code ici et ensuite nous pouvons voir
Ashish
Et aussi si vous avez deux domanis ou plus, vous devez ajouter <key>NSAllowsArbitraryLoads</key> <true/><key>NSExceptionDomains</key> Sinon pour moi, cela n'a pas fonctionné pour la version de sortie pour une raison quelconque
P.Lorand
90

Vous devez ajouter uniquement la clé NSAllowsArbitraryLoads à YES dans le dictionnaire NSAppTransportSecurity dans votre fichier info.plist.

Par exemple,

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

entrez la description de l'image ici

Hiren Varu
la source
1
C'est une solution de contournement. Le vrai problème est la mort avec la réponse de @ Ashish
judepereira
45

Cela ne fonctionnait pas pour moi, mais cela a fait l'affaire:

<key>NSAppTransportSecurity</key>  
     <dict>  
          <key>NSAllowsArbitraryLoads</key><true/>  
     </dict>  
Policier
la source
Je pense que tu veux dire <true/>au lieu de<YES/>
Clifton Labrum
1
Du point de vue de la sécurité, c'est exactement un moyen, comment NE PAS le faire, car personne ne révisera jamais cette section de code et la mettra à jour vers des domaines correctement spécifiés.
igraczech
1
Ce n'est pas une bonne pratique. Nous devrions plutôt autoriser des domaines spécifiques.
Ashish
1
Pour les autres débutants comme moi: assurez-vous de le mettre à la bonne position (à la fin, entouré par les tags </dict>et existants </plist>:
Pwdr
21

Juste pour clarifier ... Vous devez toujours utiliser httpS

Mais vous pouvez le contourner en ajoutant l'exception:

entrez la description de l'image ici

Manuel Pardo
la source
9

Xcode 8.2, iOS 10

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
Oleg Malovichko
la source
4

Mettre à jour la réponse (après wwdc 2016):

IOS apps will require secure HTTPS connections by the end of 2016

App Transport Security, ou ATS, est une fonctionnalité introduite par Apple dans iOS 9. Lorsque ATS est activé, il force une application à se connecter aux services Web via une connexion HTTPS plutôt que via HTTP non sécurisé.

Cependant, les développeurs peuvent toujours désactiver ATS et autoriser leurs applications à envoyer des données via une connexion HTTP, comme indiqué dans les réponses ci-dessus. Fin 2016, Apple rendra l' ATS obligatoire pour tous les développeurs qui espèrent soumettre leurs applications à l'App Store. lien

Paraneetharan Saravanaperumal
la source
après la fin de cette année, une nouvelle application ou une application de mise à jour sans utiliser https sera rejetée. qu'en est-il de l'application existante avec le contournement? (Nous avons besoin d'une mise à jour de la force?)
Paraneetharan Saravanaperumal
2
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>com</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>net</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>org</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

Cela permettra de se connecter à .com .net .org

Subirdcom
la source
Merci pour un exemple montrant comment ajouter plusieurs domaines.
AtheistP3ace
2
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>uservoice.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
        </dict>
    </dict>
Santhosh Legent
la source
1

Pour expliquer un peu plus sur la réponse de Parasara: la sécurité App Transport va devenir obligatoire et d' essayer de le désactiver peut obtenir votre application rejetée.

En tant que développeur, vous pouvez désactiver la sécurité App Transport si votre code réseau ne fonctionne pas avec lui et que vous souhaitez poursuivre le développement avant de résoudre les problèmes. Disons que dans une équipe de cinq, quatre peuvent continuer à travailler sur d'autres choses pendant que l'on résout tous les problèmes. Vous pouvez également désactiver la sécurité App Transport en tant qu'outil de débogage si vous rencontrez des problèmes de réseau et que vous souhaitez vérifier s'ils sont causés par la sécurité App Transport. Dès que vous savez, vous devez le réactiver immédiatement.

La solution que vous devrez utiliser à l'avenir est de ne pas utiliser du tout http, sauf si vous utilisez un serveur tiers qui ne prend pas en charge https. Si votre propre serveur ne prend pas en charge https, Apple aura un problème avec cela. Même avec des serveurs tiers, je ne parierais pas qu'Apple l'accepte.

Idem pour les différents contrôles de sécurité du serveur. À un moment donné, Apple n'acceptera que des exceptions justifiables.

Mais surtout, considérez ceci: vous mettez en danger la vie privée de vos clients. C'est un grand non-non dans mon livre. Ne fais pas ça. Corrigez votre code, ne demandez pas l'autorisation d'exécuter du code non sécurisé.

gnasher729
la source
1

Dans la ligne de commande du shell mac , utilisez la commande suivante:

plutil -insert NSAppTransportSecurity -xml "<array><string> hidden </string></array>" [location of your xcode project]/Info.plist 

La commande ajoutera toutes les valeurs nécessaires dans votre fichier plist.

Avi Levin
la source
1

XCODE 8, Swift 3: Vous devez ajouter une ligne: **

"Paramètres de sécurité du transport d'application"

** dans la liste des propriétés d'informations internes info.plist.

Robert Juamarcal
la source
0

Xcode 9.2, Swift 4, cela fonctionne pour moi.

<key>App Transport Security Settings</key>
<dict>
    <key>Allow Arbitrary Loads</key>
    <true/>
</dict>
hungmi
la source