La sécurité des transports a bloqué Un HTTP clair

quel réglage 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 ressource HTTP (http://) charge puisque c'est l'insécurité. Les exceptions temporaires peuvent être configurées via les infos de votre application.dossier plist.

Xcode

Supposons que mon domaine est example.com .

1309
demandé sur jww 2015-07-06 23:10:21

23 réponses

si vous utilisez Xcode 8.0 et Swift 3.0 ou Swift 2.2 ou même L'objectif C:

Enter image description here

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>example.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>
273
répondu Anit Kumar 2017-11-29 12:37:58

utiliser:

Enter image description here

vous devez définir le NSAllowsArbitraryLoads clé pour Oui sous nsapptransportsecurity dictionnaire dans votre .dossier plist.

Plist configuration

895
répondu CristiCh 2016-07-02 19:04:55

voici les réglages visuellement:

visual settings for NSAllowsArbitraryLoads in info.plist via Xcode GUI

796
répondu William Cerniuk 2015-11-14 20:35:12

Voir le post sur le forum Application de la Sécurité des Transports? .

aussi la page configurer les Exceptions de sécurité de Transport App dans iOS 9 et OSX 10.11 .

Par exemple, vous pouvez ajouter un domaine spécifique comme:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>example.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>

l'option paresseuse est:

<key>NSAppTransportSecurity</key>
<dict>
  <!--Include to allow all connections (DANGER)-->
  <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>

Note:

info.plist est un fichier XML de sorte que vous pouvez placer ce code plus ou moins n'importe où à l'intérieur du fichier.

690
répondu KMLong 2017-06-06 03:43:46

cela a été testé et travaillait sur iOS 9 GM seed - c'est la configuration pour permettre à un domaine spécifique D'utiliser HTTP au lieu de HTTPS:

<key>NSAppTransportSecurity</key>
<dict>
      <key>NSAllowsArbitraryLoads</key> 
      <false/>
       <key>NSExceptionDomains</key>
       <dict>
            <key>example.com</key> <!--Include your domain at this line -->
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
            </dict>
       </dict>
</dict>

NSAllowsArbitraryLoads doit être false , car il interdit toute connexion non sécurisée, mais la liste des exceptions permet la connexion à certains domaines sans HTTPS.

302
répondu Sound Blaster 2017-08-15 14:28:35

il s'agit d'une solution rapide (mais non recommandée) pour ajouter ceci dans la liste:

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

qui signifie (selon documentation D'Apple ):

NSAllowsArbitraryLoads

Une valeur booléenne utilisée pour désactiver la sécurité de Transport App pour tous les domaines qui ne sont pas listés dans le dictionnaire NSExceptionDomains. Domaines d'utilisation les paramètres spécifiés pour ce domaine.

la valeur par défaut de NO nécessite le comportement de sécurité de Transport par défaut de L'application pour toutes les connexions.

je recommande vivement les liens:

qui m'aident à comprendre les raisons et toutes les implications.

Le XML (dans le fichier Info.plist) ci-dessous will:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

interdit les appels arbitraires pour toutes les pages, mais pour PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE permettra que les connexions utilisent le protocole HTTP.

au XML ci-dessus vous pouvez ajouter:

<key>NSIncludesSubdomains</key>
<true/>

si vous souhaitez autoriser des connexions non sécurisées pour les sous-domaines de l'adresse spécifiée.

la meilleure approche est de bloquer toutes les charges arbitraires (définies à false) et d'ajouter des exceptions pour permettre seulement les adresses que nous savons être très bien.

pour les lecteurs intéressés

2018 Mise à jour:

Apple ne recommande pas de désactiver cette option - plus d'informations peuvent être trouvées dans 207 session WWDC 2018 avec plus de choses expliquées en ce qui concerne la sécurité

en Laissant l'original de la réplique, pour des raisons historiques et la phase de développement

125
répondu Julian Król 2018-09-05 11:09:29

pour ceux d'entre vous qui veulent plus de contexte sur pourquoi " cela se produit, en plus de la façon de le corriger, puis lire ci-dessous.

avec l'introduction de 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 l'application Sécurité des transports à:

  • prévenir la divulgation accidentelle, et
  • fournir un comportement par défaut qui est sécurisé.

comme expliqué dans le App Transport Security Technote , lors de la communication avec votre service web, App Transport Security a maintenant les exigences et le comportement suivants:

  • le serveur doit supporte au moins la version 1.2 du protocole TLS (Transport Layer Security).
  • Les chiffres de connexion
  • sont limités à ceux qui assurent le secret (voir la liste des chiffres ci-dessous).)
  • Les certificats
  • doivent être signés à L'aide d'un algorithme de hachage de signature SHA256 ou mieux, avec une clé RSA 2048 bits ou plus ou une clé 256 bits ou plus. clé de la courbe elliptique supérieure (ECC).
  • les certificats invalides entraînent une défaillance connexion.

en d'autres termes, votre demande de service web doit: A.) utiliser HTTPS et B.) être crypté en utilisant TLS v1.2 with forward secrecy.

cependant, comme cela a été mentionné dans d'autres messages, Vous pouvez outrepasser ce nouveau comportement de la sécurité de Transport App en spécifiant le domaine non sécurisé dans le Info.plist de votre application.


vous devez ajouter les propriétés du dictionnaire NSAppTransportSecurity > NSExceptionDomains à votre Info.plist . Ensuite, vous ajouterez le domaine de votre service web au dictionnaire NSExceptionDomains .

par exemple, si je veux contourner le comportement de sécurité de Transport D'application pour un service web sur l'hôte www.yourwebservicehost.com alors je ferais ce qui suit:

  1. ouvrez votre application dans Xcode.

  2. trouvez le fichier Info.plist dans Project Navigator et cliquez sur le bouton droit de la souris et choisissez l'option de menu ouvrir comme > code Source . Le fichier de liste de propriétés apparaîtra dans le volet de droite.

  3. placez le bloc de propriétés suivant à l'intérieur du dictionnaire des propriétés principales (sous le premier <dict> ).


<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.example.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

si vous avez besoin de fournir des exceptions pour les domaines supplémentaires, alors vous ajouteriez une autre propriété du dictionnaire sous NSExceptionDomains .

pour en savoir plus sur les touches référencées ci-dessus, lire cette technote déjà mentionnée .

113
répondu whyceewhite 2017-06-06 03:52:53

Je n'aime pas éditer la liste directement. Vous pouvez facilement l'ajouter à la liste en utilisant le GUI:

  • cliquez sur L'Info.plist dans le navigateur à gauche.
  • maintenant changer les données dans la zone principale:

    • sur la dernière ligne ajouter le +
    • Entrez le nom du groupe: App de Transport Paramètres de Sécurité
    • clic droit sur le groupe et sélectionnez Add Row
    • Entrée Autoriser L'Arbitraire Des Charges
    • fixe la valeur sur la droite à Oui

Example

64
répondu Vincent 2016-01-17 19:37:37

Apple Document 1

Apple Document 2

il y a deux solutions pour cela:

Solutions 1:

  1. Dans Info.plist fichier ajouter un dictionnaire avec la clé ' NSAppTransportSecurity '
  2. Ajouter un autre élément à l'intérieur du dictionnaire avec la touche 'Allow Arbitrary Loads'

Plist la structure doit apparaître comme montré dans l'image ci-dessous.

Solution 1

Solution 2:

  1. Dans Info.plist fichier ajouter un dictionnaire avec la clé ' NSAppTransportSecurity '
  2. Ajouter un autre élément à l'intérieur du dictionnaire avec la touche NSExceptionDomains
  3. Ajouter un élément avec la touche 'MyDomainName.com' de type Nsdiction 1519350920"
  4. ajouter l'élément avec la touche NSIncludesSubdomains " de type Boolean et la valeur fixée comme YES
  5. ajouter l'élément avec la clé " NSTemporaryExceptionAllowsInsecureHTTPLoads " de type Boolean et la valeur définie comme YES

Plist la structure doit apparaître comme montré dans l'image ci-dessous.

Solution 2

la Solution 2 est préférée car elle n'autorise que le domaine sélectionné alors que la solution 1 autorise toutes les connexions HTTP non sécurisées.

24
répondu Jayprakash Dubey 2016-03-10 12:51:16

la sécurité de Transport est disponible sur iOS 9.0 ou plus tard. Vous pouvez avoir cet avertissement en essayant d'appeler un WS à l'intérieur de votre application:

Application la sécurité du Transport a bloqué une charge de ressource HTTP (http://) puisqu'elle n'est pas sécurisée. Les exceptions temporaires peuvent être configurées via les informations de votre application.dossier plist.

ajouter ce qui suit à vos informations.plist va désactiver ATS:

<key>NSAppTransportSecurity</key>
<dict>
     <key>NSAllowsArbitraryLoads</key><true/>
</dict>
20
répondu Malek Belkahla 2016-07-02 19:09:10

Exemple De Développement

Voici une capture d'écran d'une liste qui garde ATS intact (=secure), mais permet que les connexions à localhost peuvent être faites via HTTP au lieu de HTTPS . Il fonctionne en Xcode 7.1.1.

Enter image description here

14
répondu Sebastian 2016-07-02 19:23:41

déterminer quels réglages peuvent être effectués automatiquement, comme indiqué dans cette technote :

/usr/bin/nscurl --ats-diagnostics --verbose https://your-domain.com
12
répondu ecotax 2015-10-07 08:29:36

allez à vos infos.plist

  1. clic droit sur l'espace vide et cliquez sur Ajouter la ligne
  2. écrivez le nom de clé comme NSAppTransportSecurity ,sous
  3. sélectionner les domaines D'Exception, Ajouter un nouvel article à cette
  4. écrivez votre nom de domaine qui doit être consulté
  5. changer le type de domaine de chaîne de caractères au dictionnaire, ajouter un nouvel article
  6. NSTemporaryExceptionAllowsInsecurehttploads, qui sera un booléen avec une vraie valeur. Look at the picture to follow it correctly
10
répondu Shailendra Suriyal 2017-01-09 06:28:32

selon Apple, généralement désactiver ATS conduira au rejet de l'application, sauf si vous avez une bonne raison de le faire. Même alors, vous devriez ajouter des exceptions pour les domaines auxquels vous pouvez accéder en toute sécurité.

Apple a un excellent outil qui vous dit exactement quels paramètres utiliser: dans le Terminal, entrer

/usr/bin/nscurl --ats-diagnostics --verbose https://www.example.com/whatever

et nscurl va vérifier si cette requête échoue, puis essayer une variété de paramètres et vous dire exactement ce que l'on passe, et ce que faire. Par exemple, pour une URL de tiers que je visite, cette commande m'a dit que ce dictionnaire passe:

{
    NSExceptionDomains = {
        "www.example.com" = {
            NSExceptionRequiresForwardSecrecy = false;
        };
    };
}

pour faire la distinction entre vos propres sites et les sites tiers qui sont hors de votre contrôle, utilisez, par exemple, la clé Nsthirdpartyexceptionrequiresforwardsecreccrecy.

9
répondu gnasher729 2017-06-06 04:03:34

utiliser:

PList Screenshot to understand better

Ajouter un nouvel article, NSAppTransportSecurity , dans le fichier de la liste avec le type Dictionary , puis ajouter le sous-article NSAllowsArbitraryLoads dans le dictionnaire de type Boolean , et mettre la valeur de bool YES . Cela fonctionne pour moi.

8
répondu Tejinder 2016-07-02 19:10:18

le 2015-09-25 (après les mises à jour de Xcode le 2015-09-18):

j'ai utilisé une méthode non paresseuse, mais ça n'a pas fonctionné. Les suivants sont mes essais.

Première", 151940920"

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.xxx.yyy.zzz</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

et second,

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.xxx.yyy.zzz</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

enfin, j'ai utilisé la méthode paresseuse:

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

c'est peut-être un peu incertain, mais je n'ai pas pu trouver d'autres solutions.

8
répondu Heedoo 2016-07-02 19:30:54

NOTE: le domaine d'exception dans votre liste doit être en minuscule.

exemple: vous avez nommé votre machine" MyAwesomeMacbook " sous Paramètres->partage; votre serveur (à des fins de test) tourne sur MyAwesomeMacbook.local: 3000, et votre application doit envoyer une demande à http://MyAwesomeMacbook.local:3000/fichiers ..., votre liste vous aurez besoin de spécifier " myawesomemacbook.local " comme domaine d'exception.

--

votre info.plist contiendrait...

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>myawesomemacbook.local</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSExceptionAllowsInsecureHTTPLoads</key>
      <true/>
    </dict>
  </dict>
</dict>
8
répondu ObjectiveTC 2016-09-12 18:17:38

mise à jour pour Xcode 7.1, face au problème 27.10.15:

la nouvelle valeur dans L'Info.plist est "App Transport Security Settings". De là, ce dictionnaire devrait contenir:

  • Autoriser l'Arbitraire des Charges = OUI
  • domaines D'Exception (insérez ici votre domaine http)
6
répondu MkaysWork 2016-07-02 19:25:48

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 sur elle la première fois, il est généralement dans un format de tableau, donc droit cliquez sur le fichier et "ouvrir sous" code Source, puis ajouter le code ci-dessous vers la fin, i.e.:

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

copier coller le code juste au-dessus

 "</dict>
</plist>"

qui est à la fin.

6
répondu Naishta 2016-07-02 19:27:11

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 faire pour que WKWebView fonctionne dans swift et pour une application macOS ):

si toute la science de fusée ci-dessus ne fonctionne pas pour vous, vérifiez l'évident: les réglages du bac à sable

sandbox settings]

"151900920 Étant nouveau pour swift et le cacao, mais assez expérimenté dans la programmation, j'ai passé environ 20 heures à trouver cette solution. Aucune des douzaines de tutoriels hipster-iOS ou apple ne mentionne cette petite case à cocher.

2
répondu Alekseev Vladimir 2018-07-20 14:40:57

Pour Cordova, si vous voulez l'ajouter dans votre ios.json, faites ce qui suit:

"NSAppTransportSecurity": [
   {
      "xml": "<dict><key>NSAllowsArbitraryLoads</key><true /></dict>"
   }
]

et il devrait être à l'intérieur de:

"*-Info.plist": {
   "parents": {
   }
}
1
répondu zeusstl 2016-03-21 12:41:01

utilisant NSExceptionDomains ne peut pas appliquer un effet simultanément en raison du site cible peut charger des ressources (par exemple js fichiers) à partir de domaines externes sur http . Il peut être résolu en ajoutant ces domaines externes à NSExceptionDomains ainsi.

pour vérifier quelles ressources 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 /

1
répondu Nurlan 2017-08-14 06:12:50

comme beaucoup l'ont noté, il s'agit d'un problème de fonctionnalité qui vient avec iOS 9.0. Ils ont ajouté une chose appelée App Transport Security, et j'ai été aussi ennuyé quand il a cassé mes applications.

vous pouvez le bandage avec la clé NSAllowsArbitraryLoads à OUI sous NSAppTransportSecurity dictionary dans votre .le fichier plist, mais finalement vous devrez réécrire le code qui forme vos URL pour former le préfixe HTTPS://.

Apple a réécrit le Classe nslconnection dans iOS 9.0. Vous pouvez le lire dans " Nslconnection .

sinon, vous devrez peut-être renoncer à iOS 9.0 jusqu'à ce que vous ayez le temps de mettre en œuvre la bonne solution.

-4
répondu Mark DeWald 2016-07-02 19:28:50