it-swarm.com.de

Die Transportsicherheit hat ein Klartext-HTTP blockiert

Welche Einstellung muss ich in meinem info.plist vornehmen, um den HTTP-Modus gemäß der folgenden Fehlermeldung zu aktivieren?

Die Transportsicherheit hat das Laden von HTTP-Ressourcen im Klartext (http: //) blockiert, da diese unsicher sind. Temporäre Ausnahmen können über die Info.plist-Datei Ihrer App konfiguriert werden.

Xcode

Angenommen, meine Domain ist example.com.

1401
Jeef

Wenn Sie Xcode 8.0 und Swift 3.0 oder Swift 2.2 oder sogar Objective C verwenden:

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>
398
Anit Kumar

Verwenden:

Enter image description here

Sie müssen den Schlüssel NSAllowsArbitraryLoads unter NSAppTransportSecurity auf YES setzen in Ihrer .plist-Datei.

Plist configuration

926

Hier sind die Einstellungen visuell:

visual settings for NSAllowsArbitraryLoads in info.plist via Xcode GUI

820
William Cerniuk

Siehe den Forumsbeitrag Application Transport Security?.

Auch die Seite Konfigurieren von App-Transport-Sicherheitsausnahmen in iOS 9 und OSX 10.11.

Sie können beispielsweise eine bestimmte Domäne hinzufügen, z.

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

Die faule Option ist:

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

Hinweis:

info.plist ist eine XML-Datei, sodass Sie diesen Code mehr oder weniger an einer beliebigen Stelle in der Datei platzieren können.

706
KMLong

Dies wurde getestet und funktionierte unter iOS 9 GM seed - Dies ist die Konfiguration, die es einer spezifischen Domain ermöglicht, HTTP anstelle von zu verwenden 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 muss false sein, da dies alle unsichere Verbindungen nicht zulässt, die Ausnahmeliste jedoch die Verbindung zu einigen Domänen ohne HTTPS zulässt.

322
Sound Blaster

Dies ist eine schnelle Problemumgehung (aber nicht empfohlen), um Folgendes in die Liste aufzunehmen:

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

Was bedeutet (laut Apples Dokumentation ):

NSAllowsArbitraryLoads
Ein boolescher Wert, mit dem App Transport Security für alle Domänen deaktiviert wird, die nicht im NSExceptionDomains-Wörterbuch aufgeführt sind. Bei aufgelisteten Domänen werden die für diese Domäne angegebenen Einstellungen verwendet.

Der Standardwert NO erfordert das Standardverhalten von App Transport Security für alle Verbindungen.

Ich empfehle wirklich Links:

die mir helfen, die Gründe und alle Implikationen zu verstehen.

Das XML (in der Datei Info.plist) unten wird:

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

lassen Sie keine willkürlichen Aufrufe für alle Seiten zu, aber für PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE wird zugelassen, dass Verbindungen das HTTP-Protokoll verwenden.

Zu der obigen XML können Sie Folgendes hinzufügen:

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

wenn Sie unsichere Verbindungen für die Unterdomänen der angegebenen Adresse zulassen möchten.

Der beste Ansatz ist, alle willkürlichen Ladevorgänge zu blockieren (auf false gesetzt) ​​und Ausnahmen hinzuzufügen, um nur Adressen zuzulassen, von denen wir wissen, dass sie in Ordnung sind.

Für interessierte Leser

Aktualisierung 2018:

Apple rät davon ab, dies auszuschalten - weitere Informationen finden Sie in 207 Sitzung WWDC 2018 mit weiteren Erläuterungen zur Sicherheit

Hinterlassen der ursprünglichen Antwort aus historischen Gründen und in der Entwicklungsphase

143
Julian Król

Für diejenigen unter Ihnen, die mehr über wissen möchten, warum dies geschieht, zusätzlich zur Vorgehensweise Repariere es, dann lies unten.

Mit der Einführung von iOS 9 müssen sichere Verbindungen zwischen einer App und ihrem Webdienst den bewährten Methoden folgen, um die Sicherheit der Verbindungen zwischen einer App und Webdiensten zu verbessern. Das Verhalten von Best Practices wird durch die App Transport-Sicherheit erzwungen, um:

  • unbeabsichtigte Weitergabe verhindern und
  • geben Sie ein sicheres Standardverhalten an.

Wie in der App Transport Security Technote erläutert, gelten für die Kommunikation mit Ihrem Webdienst für App Transport Security jetzt die folgenden Anforderungen und Verhaltensweisen:

  • Der Server muss mindestens TLS-Protokoll (Transport Layer Security) Version 1.2 unterstützen.
  • Verbindungs-Chiffren sind auf solche beschränkt, die für die Geheimhaltung der Weiterleitung sorgen (siehe die Liste der Chiffren unten).
  • Zertifikate müssen mit einem Signatur-Hash-Algorithmus SHA256 oder höher signiert werden, entweder mit einem RSA-Schlüssel mit 2048 Bit oder höher oder einem Elliptic-Curve-Schlüssel (ECC) mit 256 Bit oder höher.
  • Ungültige Zertifikate führen zu einem harten Fehler und keiner Verbindung.

Mit anderen Worten, Ihre Web-Service-Anfrage sollte: a.) HTTPS verwenden und b.) Mit TLS v1.2 unter Wahrung der Vorwärtsgeheimnis verschlüsselt sein.

Wie bereits in anderen Beiträgen erwähnt, können Sie dieses neue Verhalten in App Transport Security außer Kraft setzen, indem Sie die unsichere Domäne in Info.plist Ihrer App angeben.


Zum Überschreiben müssen Sie die NSAppTransportSecurity> NSExceptionDomains Wörterbucheigenschaften zu Ihrem Info.plist hinzufügen. Als Nächstes fügen Sie die Domain Ihres Webdienstes zum Wörterbuch NSExceptionDomains hinzu.

Wenn ich beispielsweise das Verhalten von App Transport Security für einen Webdienst auf dem Host www.yourwebservicehost.com umgehen möchte, würde ich Folgendes tun:

  1. Öffne deine App in Xcode.

  2. Suchen Sie die Info.plist -Datei im Projektnavigator und klicken Sie mit der rechten Maustaste darauf und wählen Sie den Öffnen als > Quellcode Menüpunkt. Die Eigenschaftslistendatei wird im rechten Bereich angezeigt.

  3. Fügen Sie den folgenden Eigenschaftsblock in das Haupteigenschaftswörterbuch ein (unter dem ersten <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>

Wenn Sie Ausnahmen für zusätzliche Domänen angeben müssen, fügen Sie unter NSExceptionDomains eine weitere Dictionary-Eigenschaft hinzu.

Um mehr über die oben genannten Tasten zu erfahren, lesen Sie dieser bereits erwähnte technische Hinweis .

115
whyceewhite

Ich mag es nicht, die Liste direkt zu bearbeiten. Sie können es einfach über die GUI zur Liste hinzufügen:

  • Klicken Sie links im Navigator auf die Info.plist.
  • Ändern Sie nun die Daten im Hauptbereich:

    • Fügen Sie in der letzten Zeile das + hinzu
    • Geben Sie den Namen der Gruppe ein: Sicherheitseinstellungen für App-Transport
    • Klicken Sie mit der rechten Maustaste auf die Gruppe und wählen Sie Add Row
    • Eingabe Beliebige Lasten zulassen
    • Stellen Sie den Wert rechts auf YES

Example

67
Vincent

Apple Document 1

Apple Document 2

Hierfür gibt es zwei Lösungen:

Lösungen 1:

  1. Fügen Sie in der Datei Info.plist ein Wörterbuch mit dem Schlüssel 'NSAppTransportSecurity' hinzu.
  2. Fügen Sie ein weiteres Element im Wörterbuch mit der Taste 'Allow Arbitrary Loads' hinzu.

Plist Die Struktur sollte wie in der Abbildung unten dargestellt aussehen.

Solution 1

Lösung 2:

  1. Fügen Sie in der Datei Info.plist ein Wörterbuch mit dem Schlüssel 'NSAppTransportSecurity' hinzu.
  2. Fügen Sie ein weiteres Element im Wörterbuch mit dem Schlüssel 'NSExceptionDomains' hinzu.
  3. Fügen Sie ein Element mit dem Schlüssel 'MyDomainName.com' vom Typ NSDictionary hinzu
  4. Füge ein Element mit dem Schlüssel 'NSIncludesSubdomains' vom Typ Boolean hinzu und setze den Wert auf YES
  5. Füge ein Element mit dem Schlüssel 'NSTemporaryExceptionAllowsInsecureHTTPLoads' vom Typ Boolean hinzu und setze den Wert auf YES

Plist Die Struktur sollte wie in der Abbildung unten dargestellt aussehen.

Solution 2

Lösung 2 wird bevorzugt, da sie nur ausgewählte Domänen zulässt, während Lösung 1 alle unsicheren HTTP-Verbindungen zulässt.

25

Transportsicherheit ist ab iOS 9.0 verfügbar. Möglicherweise haben Sie diese Warnung, wenn Sie versuchen, einen WS in Ihrer Anwendung aufzurufen:

Application Transport Security hat das Laden von Klartext-HTTP-Ressourcen (http: //) blockiert, da diese unsicher sind. Temporäre Ausnahmen können über die Info.plist-Datei Ihrer App konfiguriert werden.

Wenn Sie Ihrer Info.plist Folgendes hinzufügen, wird ATS deaktiviert:

<key>NSAppTransportSecurity</key>
<dict>
     <key>NSAllowsArbitraryLoads</key><true/>
</dict>
20
Malek Belkahla

Entwicklungsbeispiel

Hier ist ein Screenshot einer Liste, die ATS intakt hält (= sicher), aber ermöglicht, dass Verbindungen zu localhost über HTTP anstelle von HTTPS hergestellt werden können . Es funktioniert in Xcode 7.1.1.

Enter image description here

14
Sebastian

Gehen Sie zu Ihrer Info.plist

  1. Klicken Sie mit der rechten Maustaste auf den leeren Bereich und klicken Sie auf Zeile hinzufügen
  2. Schreiben Sie den Schlüsselnamen als NSAppTransportSecurity darunter
  3. Wählen Sie Ausnahmedomänen, und fügen Sie diesem Element ein neues hinzu
  4. Notieren Sie sich Ihren Domain-Namen, auf den zugegriffen werden soll
  5. Ändern Sie den Domänentyp von String in Dictionary, und fügen Sie ein neues Element hinzu
  6. NSTemporaryExceptionAllowsInsecureHTTPLoads, das ist ein Boolescher Wert mit dem Wert true. Look at the picture to follow it correctly
13

Laut Apple führt das generelle Deaktivieren von ATS zur Ablehnung von Apps, es sei denn, Sie haben einen guten Grund, dies zu tun. Selbst dann sollten Sie Ausnahmen für Domänen hinzufügen, auf die Sie sicher zugreifen können.

Apple verfügt über ein hervorragendes Tool, mit dem Sie genau festlegen können, welche Einstellungen verwendet werden sollen: Geben Sie im Terminal Folgendes ein

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

und nscurl prüft, ob diese Anfrage fehlschlägt, probiert dann verschiedene Einstellungen aus und teilt Ihnen genau mit, welche bestanden wurden und was zu tun ist. Für eine Drittanbieter-URL, die ich besuche, hat mir dieser Befehl beispielsweise mitgeteilt, dass das folgende Wörterbuch erfolgreich ist:

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

Verwenden Sie beispielsweise den Schlüssel NSThirdPartyExceptionRequiresForwardSecrecy, um zwischen Ihren eigenen Websites und Websites von Drittanbietern zu unterscheiden, auf die Sie keinen Einfluss haben.

11
gnasher729

Herauszufinden, welche Einstellungen verwendet werden sollen, kann automatisch durchgeführt werden, wie in dieser Technote :

/usr/bin/nscurl --ats-diagnostics --verbose https://your-domain.com
11
ecotax

Am 25.09.2015 (nach Xcode-Updates am 18.09.2015):

Ich habe eine nicht faule Methode angewendet, aber sie hat nicht funktioniert. Das Folgende sind meine Versuche.

Zuerst,

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

Und zweitens,

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

Schließlich habe ich die Lazy-Methode verwendet:

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

Es ist vielleicht etwas unsicher, aber ich konnte keine anderen Lösungen finden.

9
Heedoo

HINWEIS: Die Ausnahmedomäne in Ihrer Liste sollte sich in LOWER-CASE befinden.

Beispiel: Sie haben Ihr Gerät unter Einstellungen-> Freigabe "MyAwesomeMacbook" genannt. Ihr Server (zu Testzwecken) läuft auf MyAwesomeMacbook.local: 3000, und Ihre App muss eine Anfrage an http: //MyAwesomeMacbook.local: 3000/files ... senden, Ihre Liste Sie muss "myawesomemacbook.local" als Ausnahmedomäne angeben.

-

Ihre info.plist würde enthalten ...

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

In Swift 4 und xcode 10 ändern Sie NSAllowsArbitraryLoads in Allow Arbitrary Loads. es wird also so aussehen:

<key>App Transport Security Settings</key>
<dict>
     <key>Allow Arbitrary Loads</key><true/>
</dict>
8
Faris

Verwenden:

PList Screenshot to understand better

Fügen Sie ein neues Element NSAppTransportSecurity in die plist-Datei mit dem Typ Dictionary hinzu. Fügen Sie dann das Unterelement NSAllowsArbitraryLoads im Wörterbuch des Typs Boolean hinzu, und legen Sie fest bool value YES. Das funktioniert bei mir.

8
Tejinder

Es kann erwähnenswert sein, wie man dorthin kommt ...

Info.plist ist eine der Dateien unter dem Main.storyboard oder viewController.Swift.

Wenn Sie das erste Mal darauf klicken, wird es normalerweise in einem Tabellenformat angezeigt. Klicken Sie also mit der rechten Maustaste auf die Datei, und öffnen Sie sie als Quellcode. Fügen Sie dann gegen Ende den folgenden Code hinzu, d. H .:

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

Kopieren Sie den obigen Code und fügen Sie ihn ein

 "</dict>
</plist>"

das ist am Ende.

6
Naishta

Update für Xcode 7.1 mit dem Problem 27.10.15:

Der neue Wert in der Info.plist ist "App Transport Security Settings". Von dort sollte dieses Wörterbuch enthalten:

  • Beliebige Lasten zulassen = JA
  • Ausnahme-Domains (geben Sie hier Ihre http-Domain ein)
5
MkaysWork

Für diejenigen, die hierher gekommen sind, um den Grund zu finden, warum ihr WKWebView immer weiß ist und nichts lädt (genau wie hier beschrieben wie bringe ich WKWebView dazu, in Swift und für eine macOS-App zu arbeiten =):

Wenn alle oben genannten Raketenfunktionen nicht funktionieren, überprüfen Sie das Offensichtliche: die Sandbox-Einstellungen

sandbox settings]

Als Neuling in Swift und Kakao, aber ziemlich erfahren in der Programmierung, habe ich ungefähr 20 Stunden gebraucht, um diese Lösung zu finden. Keines von Dutzenden Hipster-iOS-Tutorials oder Apple Keynotes - nichts erwähnt dieses kleine Kontrollkästchen.

4

Wenn Sie NSExceptionDomains nicht gleichzeitig anwenden, werden möglicherweise Ressourcen (z. B. js -Dateien) von externen Domänen über http geladen. Es kann behoben werden, indem diese externen Domänen ebenfalls zu NSExceptionDomains hinzugefügt werden.

Um zu überprüfen, welche Ressourcen nicht geladen werden können, verwenden Sie das Remote-Debugging. Hier ist ein Tutorial: http://geeklearning.io/Apache-cordova-and-remote-debugging-on-ios/

1

Standardmäßig lässt iOS nur die HTTPS-API zu. Da HTTP nicht sicher ist, müssen Sie die Sicherheit des App-Transports deaktivieren. Es gibt zwei Möglichkeiten, ATS zu deaktivieren: -

1. Hinzufügen von Quellcode in der Projektinfo.plist und Hinzufügen des folgenden Codes im Root-Tag.

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

2. Projektinfo verwenden

Klicken Sie im linken Fensterbereich auf Projekt, wählen Sie das Projekt als Ziel und wählen Sie die Registerkarte Info. Sie müssen das Wörterbuch in der folgenden Struktur hinzufügen.

enter image description here

1
varunrathi28

Wenn Sie Cordova zu Ihrer ios.json hinzufügen möchten, gehen Sie wie folgt vor:

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

Und es sollte in sein:

"*-Info.plist": {
   "parents": {
   }
}
0
zeusstl