Quel paramètre dois-je mettre dans mon info.plist
pour activer le mode HTTP selon le message d'erreur suivant?
La sécurité des transports a bloqué une charge de ressources HTTP (http: //) en texte clair car elle n'est pas sécurisée. Les exceptions temporaires peuvent être configurées via le fichier Info.plist de votre application.
Supposons que mon domaine soit example.com
.
Allow arbitary loads
). Bientôt, cela ne sera pas possible car Apple exigera ATS (à l'origine la fin de l'année - le délai a été prolongé) - developer.apple.com/news/?id=12212016bRéponses:
Si vous utilisez Xcode 8.0+ et Swift 2.2+ ou même Objective C:
la source
NSAllowsArbitraryLoads
réglé surtrue
? Vous détournez l'objectif d'ATS. Voir aussi Le code le plus dangereux du monde: valider les certificats SSL dans un logiciel non navigateur . Votre logiciel vient de faire la liste.Utilisez NSAppTransportSecurity:
Vous devez définir la clé NSAllowsArbitraryLoads sur YES sous le dictionnaire NSAppTransportSecurity dans votre fichier info.plist.
la source
Voici les paramètres visuellement:
la source
Voir le post du forum Application Transport Security? .
Également la page Configuration des exceptions de sécurité du transport d'application dans iOS 9 et OSX 10.11 .
Par exemple, vous pouvez ajouter un domaine spécifique comme:
L'option paresseuse est:
Remarque:
info.plist
est un fichier XML afin que vous puissiez placer ce code plus ou moins n'importe où dans le fichier.la source
Cela a été testé et fonctionnait sur la graine GM d'iOS 9 - c'est la configuration pour permettre à un domaine spécifique d'utiliser HTTP au lieu de HTTPS:
NSAllowsArbitraryLoads
doit êtrefalse
, car il interdit toute connexion non sécurisée, mais la liste des exceptions autorise la connexion à certains domaines sans HTTPS.la source
Voici une solution rapide (mais non recommandée) pour ajouter ceci dans la liste:
Ce qui signifie (selon la documentation d' Apple ):
Je recommande vraiment les liens:
qui m'aident à comprendre les raisons et toutes les implications.
Le XML (dans le fichier Info.plist) ci-dessous:
interdire les appels arbitraires pour toutes les pages, mais pour
PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE
permettra aux connexions d'utiliser le protocole HTTP.Au XML ci-dessus, vous pouvez ajouter:
si vous souhaitez autoriser les connexions non sécurisées pour les sous-domaines de l'adresse spécifiée.
La meilleure approche consiste à bloquer toutes les charges arbitraires (définies sur false) et à ajouter des exceptions pour autoriser uniquement les adresses que nous savons correctes.
Pour les lecteurs intéressés
Mise à jour 2018:
Apple ne recommande pas de désactiver cette option - plus d'informations peuvent être trouvées dans 207 session WWDC 2018 avec plus de détails sur la sécurité
Laisser la réponse originale pour des raisons historiques et la phase de développement
la source
NSAllowsArbitraryLoads
doit êtrefalse
<key>NSIncludesSubdomains</key> <true/>
? Faut-il entourer chaque décor<dict>
? comment éditez-vous ce fichu fichier plist? Quelle est la mise en forme? : D Merci.Pour ceux d'entre vous qui veulent plus de contexte sur la raison pour laquelle cela se produit, en plus de savoir comment y remédier, lisez ci-dessous.
Avec l'introduction d'iOS 9, pour améliorer la sécurité des connexions entre une application et les services Web, les connexions sécurisées entre une application et son service Web doivent suivre les meilleures pratiques . Le comportement des meilleures pratiques est appliqué par App Transport Security pour:
Comme expliqué dans l' App Transport Security Technote , lors de la communication avec votre service Web, App Transport Security a désormais les exigences et le comportement suivants:
En d'autres termes, votre demande de service Web doit: a.) Utiliser HTTPS et b.) Être cryptée à l'aide de TLS v1.2 avec retransmission.
Cependant, comme cela a été mentionné dans d'autres articles, vous pouvez remplacer ce nouveau comportement depuis App Transport Security en spécifiant le domaine non sécurisé dans le
Info.plist
de votre application.Pour remplacer, vous devrez ajouter les
NSAppTransportSecurity
>NSExceptionDomains
propriétés du dictionnaire à votreInfo.plist
. Ensuite, vous ajouterez le domaine de votre service Web auNSExceptionDomains
dictionnaire.Par exemple, si je veux contourner le comportement de sécurité du transport d'application pour un service Web sur l'hôte www.yourwebservicehost.com, je ferais ce qui suit:
Ouvrez votre application dans Xcode.
Recherchez le
Info.plist
fichier dans Project Navigator et cliquez avec le bouton droit de la souris dessus et choisissez l' option de menu Ouvrir en tant que > code source . Le fichier de liste de propriétés apparaîtra dans le volet droit.Placez le bloc de propriétés suivant dans le dictionnaire de propriétés principal (sous le premier
<dict>
).Si vous devez fournir des exceptions pour des domaines supplémentaires, vous devez ajouter une autre propriété de dictionnaire en dessous
NSExceptionDomains
.Pour en savoir plus sur les touches référencées ci-dessus, lisez cette note technique déjà mentionnée .
la source
./platforms/ios/<project>/<project>-Info.plist
avecNSAllowsArbitraryLoads=false
et de nombreux domaines d'exception vers des services avec différentes combinaisons TLS / HTTP / HTTPS. Initialement utilisé,NSAllowsArbitraryLoads=true
puis ajusté, dépannage des règles par essais et erreurs pour se conformer aux directives et soumettre pour approbation. Lesconfig.xml
<access origin=.../>
instructions de note remplissent partiellement ce fichier, mais nécessitent actuellement un ajustement par modification directe ou via XCode pour obtenir les détails corrects.<access origin="*"/>
(dans config.xml) définitNSAllowsArbitraryLoads=true
(pour les applications Cordova / Phonegap / hybridesNSExceptionAllowsInsecureHTTPLoads
réglé surtrue
? Vous détournez l'objectif d'ATS. Voir aussi Le code le plus dangereux du monde: valider les certificats SSL dans un logiciel non navigateur . Votre logiciel vient de faire la liste.Je n'aime pas éditer directement le plist. Vous pouvez facilement l'ajouter à la liste en utilisant l'interface graphique:
Modifiez maintenant les données dans la zone principale:
Add Row
la source
NSAllowsArbitraryLoads
réglé surYES
? Vous détournez l'objectif d'ATS. Voir aussi Le code le plus dangereux du monde: valider les certificats SSL dans un logiciel non navigateur . Votre logiciel vient de faire la liste.Il existe deux solutions pour cela:
Solutions 1:
Info.plist
fichier, ajoutez un dictionnaire avec la clé 'NSAppTransportSecurity
''Allow Arbitrary Loads'
Plist
la structure doit apparaître comme indiqué dans l'image ci-dessous.Solution 2:
Info.plist
fichier, ajoutez un dictionnaire avec la clé 'NSAppTransportSecurity
'NSExceptionDomains
''MyDomainName.com'
de type NSDictionaryNSIncludesSubdomains
' de typeBoolean
et de valeur définis commeYES
NSTemporaryExceptionAllowsInsecureHTTPLoads
' de typeBoolean
et de valeur définis commeYES
Plist
la structure doit apparaître comme indiqué dans l'image ci-dessous.La solution 2 est préférée car elle autorise uniquement le domaine sélectionné tandis que la solution 1 autorise toutes les connexions HTTP non sécurisées.
la source
NSAllowsArbitraryLoads
réglé surYES
? Vous détournez l'objectif d'ATS. Voir aussi Le code le plus dangereux du monde: valider les certificats SSL dans un logiciel non navigateur . Votre logiciel vient de faire la liste.La sécurité du transport est disponible sur iOS 9.0 ou version ultérieure. Vous pouvez avoir cet avertissement lorsque vous essayez d'appeler un WS dans votre application:
L'ajout de ce qui suit à votre Info.plist désactivera ATS:
la source
Exemple de développement
Voici une capture d'écran d'une liste qui garde ATS intact (= sécurisé), mais permet que les connexions à l' hôte local puissent être établies via HTTP au lieu de HTTPS . Cela fonctionne dans Xcode 7.1.1.
la source
NSExceptionAllowsInsecureHTTPLoads - YES
configuration par défaut ?Accédez à votre Info.plist
la source
NSAllowsArbitraryLoads
réglé surtrue
? Vous détournez l'objectif d'ATS. Voir aussi Le code le plus dangereux du monde: valider les certificats SSL dans un logiciel non navigateur . Votre logiciel vient de faire la liste.Selon Apple, la désactivation générale de l'ATS entraînera le rejet de l'application, sauf si vous avez une bonne raison de le faire. Même dans ce cas, vous devez ajouter des exceptions pour les domaines auxquels vous pouvez accéder en toute sécurité.
Apple a un excellent outil qui vous indique exactement quels paramètres utiliser: dans Terminal, entrez
et nscurl vérifiera si cette demande échoue, puis essayera une variété de paramètres et vous dira exactement lequel passe, et quoi faire. Par exemple, pour une URL tierce que je visite, cette commande m'a dit que ce dictionnaire réussit:
Pour distinguer entre vos propres sites et les sites tiers qui sont hors de votre contrôle, utilisez, par exemple, la clé NSThirdPartyExceptionRequiresForwardSecrecy.
la source
NSExceptionAllowsInsecureHTTPLoads = true;
, mais il s'avère que celle-ci n'est pas nécessaire.Déterminer quels paramètres utiliser peuvent être effectués automatiquement, comme mentionné dans cette note technique :
la source
REMARQUE: le domaine d'exception dans votre liste doit être en MAJUSCULES.
Exemple: vous avez nommé votre machine "MyAwesomeMacbook" sous Paramètres-> Partage; votre serveur (à des fins de test) fonctionne sur MyAwesomeMacbook.local: 3000 et votre application doit envoyer une demande à http: //MyAwesomeMacbook.local: 3000 / files ..., votre plist vous devrez spécifier "myawesomemacbook. local "comme domaine d'exception.
-
Votre info.plist contiendrait ...
la source
Utilisation:
Ajoutez un nouvel élément, NSAppTransportSecurity , dans le fichier plist avec le type Dictionary , puis ajoutez le sous-élément NSAllowsArbitraryLoads dans le dictionnaire de type Boolean et définissez la valeur booléenne YES . Cela fonctionne pour moi.
la source
Le 2015-09-25 (après les mises à jour de Xcode le 2015-09-18):
J'ai utilisé une méthode non paresseuse, mais cela n'a pas fonctionné. Les suivants sont mes essais.
Première,
Et deuxieme,
Enfin, j'ai utilisé la méthode paresseuse:
Cela peut être un peu précaire, mais je n'ai pas pu trouver d'autres solutions.
la source
NSAllowsArbitraryLoads
réglé surtrue
? Vous détournez l'objectif d'ATS. Voir aussi Le code le plus dangereux du monde: valider les certificats SSL dans un logiciel non navigateur . Votre logiciel vient de faire la liste.Dans swift 4 et xocde 10, modifiez NSAllowsArbitraryLoads pour autoriser les charges arbitraires. donc ça va ressembler à ça:
la source
Il peut être utile de mentionner comment s'y rendre ...
Info.plist est l'un des fichiers sous le Main.storyboard ou viewController.swift.
Lorsque vous cliquez dessus pour la première fois, il est généralement sous forme de tableau, donc cliquez avec le bouton droit sur le fichier et ouvrez-le comme code source, puis ajoutez le code ci-dessous vers la fin, c'est-à-dire:
Copiez collez le code juste au-dessus
qui est à la fin.
la source
NSAllowsArbitraryLoads
réglé surtrue
? Vous détournez l'objectif d'ATS. Voir aussi Le code le plus dangereux du monde: valider les certificats SSL dans un logiciel non navigateur . Votre logiciel vient de faire la liste.Mise à jour pour Xcode 7.1, face au problème 27.10.15:
La nouvelle valeur dans Info.plist est "App Transport Security Settings". De là, ce dictionnaire devrait contenir:
la source
Pour ceux qui sont venus ici en essayant de trouver la raison pour laquelle leur WKWebView est toujours blanc et ne charge rien (exactement comme décrit ici, comment puis-je faire fonctionner WKWebView en swift et pour une application macOS ):
Si toute la science des fusées ci-dessus ne fonctionne pas, vérifiez l'évidence: les paramètres du bac à sable
Étant nouveau dans swift et cacao, mais assez expérimenté en programmation, j'ai passé environ 20 heures à trouver cette solution. Aucun des dizaines de tutoriels hipster-iOS ni des notes de présentation Apple - rien ne mentionne cette petite case à cocher.
la source
Par défaut, iOS n'autorise que l'API HTTPS. Étant donné que HTTP n'est pas sécurisé, vous devrez désactiver la sécurité du transport d'application. Il existe deux façons de désactiver ATS: -
Cliquez sur projet dans le projet dans le volet gauche, sélectionnez le projet comme cible et choisissez l'onglet info. Vous devez ajouter le dictionnaire dans la structure suivante.
la source
la source
L'utilisation
NSExceptionDomains
peut ne pas appliquer simultanément un effet car le site cible peut charger des ressources (par exemple desjs
fichiers) à partir de domaines externeshttp
. Il peut être résolu en ajoutant également ces domaines externesNSExceptionDomains
.Pour inspecter les ressources qui ne peuvent pas être chargées, essayez d'utiliser le débogage à distance. Voici un tutoriel: http://geeklearning.io/apache-cordova-and-remote-debugging-on-ios/
la source
Pour Cordova, si vous souhaitez l'ajouter dans votre ios.json, procédez comme suit:
Et cela devrait être à l'intérieur de:
la source
NSAllowsArbitraryLoads
réglé surtrue
? Vous détournez l'objectif d'ATS. Voir aussi Le code le plus dangereux du monde: valider les certificats SSL dans un logiciel non navigateur . Votre logiciel vient de faire la liste.Comme beaucoup l'ont remarqué, il s'agit d'un problème de fonctionnalité fourni avec iOS 9.0. Ils ont ajouté une chose appelée App Transport Security, et moi aussi j'étais ennuyé quand cela a cassé mes applications.
Vous pouvez le bander avec la clé NSAllowsArbitraryLoads sur YES sous le dictionnaire NSAppTransportSecurity dans votre fichier .plist, mais vous devrez finalement réécrire le code qui forme vos URL pour former le préfixe HTTPS: //.
Apple a réécrit la classe NSUrlConnection dans iOS 9.0. Vous pouvez en lire plus dans NSURLConnection .
Sinon, vous devrez peut-être abandonner iOS 9.0 jusqu'à ce que vous ayez le temps de mettre en œuvre la bonne solution.
la source