Die Transportsicherheit hat ein Klartext-HTTP blockiert

1451

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

Die Transportsicherheit hat eine Klartext-HTTP-Ressourcenlast (http: //) blockiert, da sie unsicher ist. Temporäre Ausnahmen können über die Info.plist-Datei Ihrer App konfiguriert werden.

Xcode

Angenommen, meine Domain ist example.com.

Jeef
quelle
15
Moderator Hinweis : Es gibt bereits 36 Antworten auf diese Frage. Vor dem Hinzufügen einer anderen , stellen Sie sicher , dass Ihre Lösung ist neu .
Matt
5
HINWEIS: Die hier vorgeschlagenen Lösungen empfehlen, ATS auszuschalten ( Allow arbitary loads). Bald wird dies nicht mehr möglich sein, da Apple ATS benötigt (ursprünglich das Ende des Jahres - Frist wurde verlängert) - developer.apple.com/news/?id=12212016b
Jakub Truhlář
@Jeef warum hast du iOS 10 Tag hinzugefügt? Gab es in dieser Angelegenheit zusätzliche Änderungen in iOS 10? Ich denke, dass es in iOS9 eingeführt wurde und dass Tag in Bezug auf iOS-Versionen ausreichend sein sollte
Julian Król

Antworten:

469

Wenn Sie Xcode 8.0+ und Swift 2.2+ oder sogar Ziel C verwenden:

Geben Sie hier die Bildbeschreibung ein

<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>
Anit Kumar
quelle
29
Warum ist NSAllowsArbitraryLoadseingestellt auf true? Sie untergraben den Zweck von ATS. Siehe auch Der gefährlichste Code der Welt: Überprüfen von SSL-Zertifikaten in Nicht-Browser-Software . Ihre Software hat gerade die Liste erstellt.
JWW
6
@jww Dies ist der Zweck dieses Beitrags. Die Site, zu der ich eine Verbindung herstellen muss, um Audio abzuspielen, verwendet noch kein HTTPS und ich versuche nicht zu warten.
ThinkDigital
5
Dies funktioniert nicht in iOS 10.0+ oder MacOS 10.12+. Es heißt tatsächlich, alle willkürlichen Ladevorgänge außer den genannten zuzulassen (example.com). Somit würde es das Gegenteil von dem tun, was gewünscht wird. NSAllowsArbirtraryLoads sollte hier auf false gesetzt werden. Weitere Informationen: Apple Docs
Freek Sanders
1
Stimmen Sie zu, warum um alles in der Welt stimmen alle dem zu? Es macht keinen Sinn, NSAllowsArbitraryLoads zu verwenden, wenn Sie eine Ausnahmedomäne festlegen.
Thibaut Noah
1
NSAllowsArbitraryLoads muss nicht true sein, daher muss es entfernt werden. NSExceptionDomains reicht aus, um nur eine unsichere Verbindung zu dieser Domäne zu ermöglichen. NSAllowsArbitraryLoads = true aktiviert eine nicht sichere Verbindung zu einer beliebigen Domäne. Wenn Sie diese also weiterhin auf true setzen, wird der NSExceptionDomains-Unsinn angezeigt, da er bereits alle Domänen enthält
mister_giga
950

Verwenden Sie NSAppTransportSecurity:

Geben Sie hier die Bildbeschreibung ein

Sie haben die festlegen NSAllowsArbitraryLoads Schlüssel zum YES unter NSAppTransportSecurity Wörterbuch in Ihrer info.plist Datei.

Plist Konfiguration

User123335511231
quelle
157
Lassen Sie es wissen : Dies ist ein Workaround! Jedes Mal, wenn Sie HTTP über HTTPS verwenden, öffnen Sie die Geräte Ihres Benutzers für Sicherheitslücken. Sicher, es ist in vielen Fällen unwahrscheinlich, aber ethische Programmierung ist eine bewährte Methode. Sagen Sie einfach ... - auch +1 für die Arbeit (zu Testzwecken)
Jacksonkr
36
Dies ist keine Lösung - dies ist ein HACK! Informationen
DiscDev
17
Obwohl diese Lösung als anfällig bekannt ist, ist sie die einzige Lösung, die ich während der ENTWICKLUNG empfehlen würde . Es ist einfach albern, während der Entwicklung jede exakte Domain eingeben zu müssen (insbesondere, wenn Sie Webdienste von Drittanbietern verwenden).
reTs
6
Der Name dieser Schlüssel hat sich jetzt "App Transport Security Settings" unter "Allow Arbitrary Loads"
geändert
11
Warum sind so viele Leute gegen diese Lösung? Dies ist definitiv kein Hack! Viele Apps müssen mit dem eigentlichen Internet kommunizieren, wo das Sicherheitsprotokoll nicht immer unter Ihrer Kontrolle steht. Zum Beispiel erscheint es sehr vernünftig, Bilder von anderen Servern ohne SSL-Zertifikat anzeigen zu können.
Oren
825

Hier sind die Einstellungen visuell:

visuelle Einstellungen für NSAllowsArbitraryLoads in info.plist über die Xcode-GUI

William Cerniuk
quelle
10
Ich habe diese Option nicht.
Benutzer
25
Wenn Sie Ihre Info.plist direkt öffnen, können Sie einfach das NSAppTransportSecurity- Wörterbuch hinzufügen und dann das darin enthaltene Element NSAllowsArbitraryLoads erstellen (siehe die von Umar Farooq bearbeitete Antwort unten).
Stoph
3
Gleiches hier - Ausnahmedomänen funktionierten bei mir nicht mit 7.3.
RegularExpression
4
Diese Option existiert nicht - XCode 7.3.1
Jameshfisher
3
Die Informationen von @JoshPinter arbeiteten für mich mit XCode 8.
Matthew Bellantoni
717

Siehe den Forumsbeitrag Application Transport Security? .

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

Sie können beispielsweise eine bestimmte Domain 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.

KMLong
quelle
1
Wie kann ich das machen? Ich meine, wie kann ich diesen Code zur Info.plist hinzufügen, weil ich nicht weiß, wo ich diesen Code einfügen soll?
lmiguelvargasf
2
@ lmiguelvargasf öffnen Sie Ihre info.plist in einem einfachen Texteditor
Dan Beaulieu
7
Ich erhalte immer noch die Fehlermeldung: Die Ausnahmedomäne ist festgelegt und NSAllowsArbitraryLoads ist falsch. Selbst wenn NSAllowsArbitraryLoads auf true gesetzt ist, wird der Fehler angezeigt. Hat noch jemand hier dieses Problem?
klaevv
3
Ab dem 30.01.2016 zeigt das Apple-Dokument, dass die Schlüssel kein temporäres Wort mehr enthalten, z. B.: NSExceptionAllowsInsecureHTTPLoads NSExceptionMinimumTLSVersion Siehe developer.apple.com/library/prerelease/ios/documentation/…
Philippe Monnet
3
Für den Fall, dass sich jemand anderes die Haare ausreißt, weil diese einfachen Änderungen an info.plist nicht funktionieren. Fügen Sie die Änderungen zu Projekt> Ziel> Info> Benutzerdefinierte iOS-
Zieleigenschaften
330

Dies wurde getestet und funktionierte mit iOS 9 GM Seed. Dies ist die Konfiguration, mit der eine bestimmte Domäne HTTP anstelle von HTTPS verwenden kann:

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

NSAllowsArbitraryLoadsmuss sein false, da es alle unsicheren Verbindungen verbietet , aber die Ausnahmeliste die Verbindung zu einigen Domänen ohne HTTPS ermöglicht.

Sound Blaster
quelle
7
Dies sollte als Antwort markiert werden. Getestet und mit iOS 9 GM-Seed gearbeitet, damit eine bestimmte Domain http verwenden kann, ohne den "faulen" Weg zu gehen und Ihre App vollständig zu öffnen.
DiscDev
2
Wie füge ich das meiner info.plist hinzu?
JMStudios.jrichardson
8
Ok, ich habe diesen Eintrag zu meiner info.plist hinzugefügt und erhalte immer noch die folgende Fehlermeldung: "App Transport Security hat das Laden von HTTP-Ressourcen im Klartext (http: //) blockiert, da diese unsicher sind. Temporäre Ausnahmen können über die Info Ihrer App konfiguriert werden .plist Datei. "
KMC
2
@RomanShapovalov Wenn Sie eine IP-Adresse verwenden müssen, fügen Sie am Ende der IP-Adresse .xip.io hinzu und fügen Sie xip.io zu Ihren NSExceptionDomains hinzu. Siehe xip.io . Ich verbinde mich beim Entwickeln direkt mit IP (aber nicht freigeben) und das funktioniert hervorragend für mich.
Tpankake
2
Arbeitete nicht für mich, bis mir klar wurde, dass ich es in meinem Testprojekt in die falsche info.plist gesetzt hatte. Stellen Sie sicher, dass Sie es in die richtige setzen!
Chucky
144

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

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

Was bedeutet (laut Apple-Dokumentation ):

NSAllowsArbitraryLoads
Ein boolescher Wert, der zum Deaktivieren der App-Transportsicherheit für alle Domänen verwendet wird, die nicht im NSExceptionDomains-Wörterbuch aufgeführt sind. Aufgeführte Domänen verwenden die für diese Domäne angegebenen Einstellungen.

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 Auswirkungen zu verstehen.

Das folgende XML (in der Datei Info.plist) 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>

beliebige Aufrufe für alle Seiten PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDEnicht zulassen , aber für Verbindungen wird das HTTP-Protokoll verwendet.

Zum obigen XML können Sie hinzufügen:

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

Wenn Sie unsichere Verbindungen für die Subdomains der angegebenen Adresse zulassen möchten.

Der beste Ansatz besteht darin, alle beliebigen 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

Update 2018:

Apple empfiehlt, dies nicht auszuschalten. Weitere Informationen finden Sie in der WWDC 2018-Sitzung 207 , in der weitere Informationen zur Sicherheit erläutert werden

Die ursprüngliche Antwort aus historischen Gründen und Entwicklungsphase verlassen

Julian Król
quelle
1
NSAllowsArbitraryLoadsmuss seinfalse
Sound Blaster
@ SoundBlaster für welchen Fall und was sehen Sie in meiner Antwort auf die Abwahl falsch?
Julian Król
Durch Hinzufügen von plist (NSAppTransportSecurity NSAllowsArbitraryLoads) funktionieren alle Webdienste einwandfrei, mit Ausnahme eines Webdienstes. Ein Webdienst gibt einen internen Serverfehler (500) in iOS 9 zurück, funktioniert jedoch in iOS8 oder höher
amit gupta
@ SoundBlaster hat eine Änderung vorgenommen, jetzt sollten Sie keine Einwände mehr haben :)
Julian Król
Danke, wie fügt man das eigentlich hinzu <key>NSIncludesSubdomains</key> <true/>? Muss jede Umgebung von umgeben sein <dict>? Wie bearbeitest du diese verdammte Plist-Datei? Wie ist die Formatierung? : D Danke.
Agent Zebra
116

Für diejenigen unter Ihnen, die mehr darüber erfahren möchten, warum dies geschieht, und darüber, wie es behoben werden kann, lesen Sie weiter unten.

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

  • verhindern versehentliche Offenlegung, und
  • Geben Sie ein sicheres Standardverhalten an.

Wie im 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 das TLS-Protokoll (Transport Layer Security) Version 1.2 unterstützen.
  • Verbindungs-Chiffren sind auf diejenigen beschränkt, die Vorwärtsgeheimnis bieten (siehe Liste der Chiffren unten).
  • Zertifikate müssen mit einem SHA256-Hash-Algorithmus oder einem besseren Signatur-Hash-Algorithmus signiert werden, entweder mit einem RSA-Schlüssel mit 2048 Bit oder mehr oder einem ECC-Schlüssel (Elliptic-Curve) mit 256 Bit oder höher.
  • Ungültige Zertifikate führen zu einem harten Fehler und keiner Verbindung.

Mit anderen Worten, Ihre Webdienstanforderung sollte: a.) HTTPS verwenden und b.) Mit TLS v1.2 mit Vorwärtsgeheimnis verschlüsselt werden.

Wie bereits in anderen Beiträgen erwähnt, können Sie dieses neue Verhalten von App Transport Security überschreiben, indem Sie die unsichere Domäne in Info.plistIhrer App angeben.


Zum Überschreiben müssen Sie die NSAppTransportSecurity> NSExceptionDomainsWörterbuch-Eigenschaften zu Ihrem hinzufügen Info.plist. Als Nächstes fügen Sie die Domain Ihres Webdienstes zum NSExceptionDomainsWörterbuch 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. Öffnen Sie Ihre App in Xcode.

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

  3. Fügen Sie den folgenden Eigenschaftenblock in das Haupteigenschaftenwörterbuch ein (unter den 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 darunter eine weitere Wörterbucheigenschaft hinzu NSExceptionDomains.

Um mehr über die oben genannten Schlüssel zu erfahren, lesen Sie diesen bereits erwähnten Technote .

warum weiß
quelle
1
Dies hat in 2 meiner Apps funktioniert, aber in einer dritten nicht. Hat jemand eine Situation erlebt, in der das oben genannte Update verwendet wurde und immer noch dieselbe Fehlermeldung angezeigt wird? (und ja, ich habe das Wörterbuch aktualisiert, um meine API-Domäne zu verwenden, nicht die im Code)
Hallo,
Beste ! Apple bestätigt, dass diese Lösung mit
YannSteph
Dies funktionierte für eine Cordova / Phonegap / Ionic-App-Bearbeitungsdatei ./platforms/ios/<project>/<project>-Info.plistmit NSAllowsArbitraryLoads=falseund vielen Ausnahmedomänen für Dienste mit unterschiedlichen TLS / HTTP / HTTPS-Kombinationen. Zunächst verwendet, NSAllowsArbitraryLoads=truedann angepasst, Fehlerbehebung bei den Regeln durch Ausprobieren, um den Richtlinien zu entsprechen und zur Genehmigung einzureichen. Hinweisanweisungen config.xml <access origin=.../>füllen diese Datei teilweise aus, müssen jedoch derzeit durch direkte Bearbeitung oder über XCode angepasst werden, damit die Details korrekt sind.
Jimmy
Auch <access origin="*"/>(in config.xml) setzt NSAllowsArbitraryLoads=true(für Cordova / Phonegap / Hybrid-Apps
jimmont
Warum ist NSExceptionAllowsInsecureHTTPLoadseingestellt auf true? Sie untergraben den Zweck von ATS. Siehe auch Der gefährlichste Code der Welt: Überprüfen von SSL-Zertifikaten in Nicht-Browser-Software . Ihre Software hat gerade die Liste erstellt.
JWW
67

Ich mag es nicht, die Plist 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: App Transport Security Settings
    • Klicken Sie mit der rechten Maustaste auf die Gruppe und wählen Sie Add Row
    • Geben Sie Beliebige Lasten zulassen ein
    • Stellen Sie den Wert rechts auf YES

Beispiel

Vincent
quelle
Zur Verdeutlichung: Wenn "Beliebige Lasten zulassen" JA ist und "Ausnahmedomänen" vorhanden sind, sind die zulässigen Lasten auf diejenigen in den Ausnahmedomänen beschränkt. Ist das korrekt?
Ist das ein sicherer Weg, wenn ich die Anwendung freigeben möchte?
Lamour
Nein. Durch das Zulassen beliebiger Ladevorgänge kann Ihre App eine freie Verbindung zu beliebigen Domains herstellen. Unter Sicherheitsgesichtspunkten sollten Sie steuern und einschränken, zu welcher Domain / Website die App eine Verbindung herstellen soll, um eine unerwartete Netzwerknutzung zu vermeiden.
Raptor
Die meisten Apps werden nur an bekannte Server weitergeleitet. Dies wird vom Entwickler gesteuert. Die Sicherheitsprobleme sind also bekannt.
Vincent
Warum ist NSAllowsArbitraryLoadseingestellt auf YES? Sie untergraben den Zweck von ATS. Siehe auch Der gefährlichste Code der Welt: Überprüfen von SSL-Zertifikaten in Nicht-Browser-Software . Ihre Software hat gerade die Liste erstellt.
JWW
25

Apple-Dokument 1

Apple-Dokument 2

Hierfür gibt es zwei Lösungen:

Lösungen 1:

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

Plist Die Struktur sollte wie im folgenden Bild gezeigt aussehen.

Lösung 1

Lösung 2:

  1. Info.plistFügen Sie in der Datei 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. Element mit Schlüssel 'MyDomainName.com'vom Typ NSDictionary hinzufügen
  4. Fügen Sie ein Element mit dem Schlüssel ' NSIncludesSubdomains' des Typs Booleanund des Werts hinzu, der als festgelegt istYES
  5. Fügen Sie ein Element mit dem Schlüssel ' NSTemporaryExceptionAllowsInsecureHTTPLoads' des Typs Booleanund des Werts hinzu, der als festgelegt istYES

Plist Die Struktur sollte wie im folgenden Bild gezeigt aussehen.

Lösung 2

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

Jayprakash Dubey
quelle
Warum ist NSAllowsArbitraryLoadseingestellt auf YES? Sie untergraben den Zweck von ATS. Siehe auch Der gefährlichste Code der Welt: Überprüfen von SSL-Zertifikaten in Nicht-Browser-Software . Ihre Software hat gerade die Liste erstellt.
JWW
20

Die Transportsicherheit ist unter iOS 9.0 oder höher verfügbar. Möglicherweise wird diese Warnung angezeigt, 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 Folgendes zu Ihrer Info.plist hinzufügen, wird ATS deaktiviert:

<key>NSAppTransportSecurity</key>
<dict>
     <key>NSAllowsArbitraryLoads</key><true/>
</dict>
Malek Belkahla
quelle
1
NSAllowsArbitraryLoads muss false sein, wenn true, werden alle unsicheren Verbindungen zugelassen
Thiago Arreguy,
Durch Hinzufügen in plist funktionieren alle Webdienste einwandfrei, mit Ausnahme eines Webdienstes. Ein Webdienst gibt den internen Serverfehler (500) in iOS 9 zurück, funktioniert jedoch in iOS8 oder höher
einwandfrei
1
Im Laden akzeptiert?
Vrashabh Irde
Sehr schlechter Rat; Siehe Der gefährlichste Code der Welt: Überprüfen von SSL-Zertifikaten in Nicht-Browser-Software . Angesichts der Frage, ob die empfohlene Vorgehensweise voll ist, werden solche Antworten "ich auch" nicht benötigt.
JWW
15

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.

Geben Sie hier die Bildbeschreibung ein

Sebastian
quelle
Gibt es Möglichkeiten, localhost in React-Native sicher zu machen, dh HTTPS zu verwenden, damit wir nicht die Standardkonfiguration verwenden müssen NSExceptionAllowsInsecureHTTPLoads - YES?
Milkersarac
13

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 ein neues Element hinzu
  4. Notieren Sie sich Ihren Domainnamen, auf den zugegriffen werden muss
  5. Ändern Sie den Domänentyp von "Zeichenfolge" in "Wörterbuch" und fügen Sie ein neues Element hinzu
  6. NSTemporaryExceptionAllowsInsecureHTTPLoads, das ist ein Boolescher Wert mit einem wahren Wert. Schauen Sie sich das Bild an, um es richtig zu verfolgen
Shailendra Suriyal
quelle
1
Warum ist NSAllowsArbitraryLoadseingestellt auf true? Sie untergraben den Zweck von ATS. Siehe auch Der gefährlichste Code der Welt: Überprüfen von SSL-Zertifikaten in Nicht-Browser-Software . Ihre Software hat gerade die Liste erstellt.
JWW
13

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

Apple hat ein hervorragendes Tool, das Ihnen genau sagt, welche Einstellungen Sie verwenden sollen: Geben Sie im Terminal ein

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

und nscurl prüft, ob diese Anforderung fehlschlägt, probiert dann verschiedene Einstellungen aus und teilt Ihnen genau mit, welche übergeben werden und was zu tun ist. Für eine URL eines Drittanbieters, die ich besuche, hat mir dieser Befehl beispielsweise mitgeteilt, dass dieses Wörterbuch übergeben wird:

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

gnasher729
quelle
1
Es ist ein großartiges Tool, das Sie überprüfen können, bevor Sie es mit der Anwendung testen. Zeit sparen. aber jede Ressource zu lesen, um die Ausgabe dieses Befehls zu verstehen.
DamithH
1
Interessantes Werkzeug. In meinem Fall übertreibt es die Dinge jedoch. Es werden drei Schlüssel aufgelistet, einschließlich NSExceptionAllowsInsecureHTTPLoads = true;, aber es stellt sich heraus, dass einer nicht benötigt wird.
Chris Prince
11

Finden Sie heraus, welche Einstellungen verwendet werden sollen, wie in diesem Technote erwähnt :

/usr/bin/nscurl --ats-diagnostics --verbose https://your-domain.com
Ökotax
quelle
Dazu benötigen Sie anscheinend OS X 10.11 (El Capitan).
Ecotax
10

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

Beispiel: Sie haben Ihren Computer 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. In Ihrer Liste müssen Sie "myawesomemacbook" angeben. local "als Ausnahmedomäne.

- -

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

Verwenden:

PList Screenshot zum besseren Verständnis

Fügen Sie ein neues Element, NSAppTransportSecurity , in die plist-Datei mit dem Typ Dictionary ein , fügen Sie dann das Unterelement NSAllowsArbitraryLoads im Wörterbuch vom Typ Boolean hinzu und setzen Sie den Bool-Wert YES . Das funktioniert bei mir.

Tejinder
quelle
1
NSAllowsArbitraryLoads muss false sein, wenn true, werden alle unsicheren Verbindungen zugelassen
Thiago Arreguy
Durch Hinzufügen in plist funktionieren alle Webdienste einwandfrei, mit Ausnahme eines Webdienstes. Ein Webdienst gibt den internen Serverfehler (500) in iOS 9 zurück, funktioniert jedoch in iOS8 oder höher. @ThiagoArreguy
amit gupta
Sehr schlechter Rat; Siehe Der gefährlichste Code der Welt: Überprüfen von SSL-Zertifikaten in Nicht-Browser-Software . Angesichts der Frage, ob die empfohlene Vorgehensweise voll ist, werden solche Antworten "Ich auch" nicht benötigt.
JWW
Ich weiß, es ist ein schlechter Rat, aber es ist vorerst nur eine Lösung im Entwicklungsmodus. Apple hat uns Flexibilität gegeben, wenn es so schlimm ist, würden sie dies nicht zulassen.
Tejinder
9

Am 25.09.2015 (nach Xcode-Updates am 18.09.2015):

Ich habe eine nicht faule Methode verwendet, 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 faule Methode angewendet:

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

Es mag etwas unsicher sein, aber ich konnte keine anderen Lösungen finden.

Heedoo
quelle
Warum ist NSAllowsArbitraryLoadseingestellt auf true? Sie untergraben den Zweck von ATS. Siehe auch Der gefährlichste Code der Welt: Überprüfen von SSL-Zertifikaten in Nicht-Browser-Software . Ihre Software hat gerade die Liste erstellt.
JWW
9

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

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

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, liegt es normalerweise in einem Tabellenformat vor. 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:

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

Kopieren Sie den Code direkt oben

 "</dict>
</plist>"

Das ist am Ende.

Naishta
quelle
Warum ist NSAllowsArbitraryLoadseingestellt auf true? Sie untergraben den Zweck von ATS. Siehe auch Der gefährlichste Code der Welt: Überprüfen von SSL-Zertifikaten in Nicht-Browser-Software . Ihre Software hat gerade die Liste erstellt.
JWW
5

Update für Xcode 7.1 mit Problem 27.10.15:

Der neue Wert in der Info.plist lautet "Sicherheitseinstellungen für den App-Transport". Von dort sollte dieses Wörterbuch enthalten:

  • Beliebige Lasten zulassen = JA
  • Ausnahmedomänen (fügen Sie hier Ihre http-Domain ein)
MkaysWork
quelle
4

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 kann ich WKWebView schnell und für eine macOS-App zum Laufen bringen? ):

Wenn die gesamte oben genannte Raketenwissenschaft für Sie nicht funktioniert, überprüfen Sie das Offensichtliche: die Sandbox-Einstellungen

Sandbox-Einstellungen]

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

Alekseev Vladimir
quelle
Oh mein Gott, vielen Dank! Du hast mir die gleiche 20-Stunden-Suche erspart!
Brecht Machiels
2
Ich sehe diesen Abschnitt nicht im Abschnitt "Funktionen" des Ziels (Xcode 9.4.1)
Shim
3

Standardmäßig erlaubt iOS nur die HTTPS-API. Da HTTP nicht sicher ist, müssen Sie die App-Transportsicherheit 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. Projektinformationen verwenden.

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

Geben Sie hier die Bildbeschreibung ein

varunrathi28
quelle
3

Wie man es repariert?

Geben Sie hier die Bildbeschreibung ein

Unten Schritte, um das Problem zu beheben.

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Kamani Jasmin
quelle
1

Bei Verwendung wird NSExceptionDomainsmöglicherweise kein Effekt gleichzeitig angewendet, da die Zielwebsite möglicherweise Ressourcen (z. B. jsDateien) von externen Domänen überlädt http. Es kann auch durch Hinzufügen dieser externen Domänen behoben werden NSExceptionDomains.

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

Nurlan Akashayev
quelle
0

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 innerhalb sein von:

"*-Info.plist": {
   "parents": {
   }
}
zeusstl
quelle
Nur <access origin = "*" /> in config.xml hat nicht funktioniert. Ich bin mir nicht sicher, ob beides notwendig ist, aber die ios.json-Lösung hat den Deal für mich besiegelt.
Zeusstl
Warum ist NSAllowsArbitraryLoadseingestellt auf true? Sie untergraben den Zweck von ATS. Siehe auch Der gefährlichste Code der Welt: Überprüfen von SSL-Zertifikaten in Nicht-Browser-Software . Ihre Software hat gerade die Liste erstellt.
JWW
-1

Wie viele bemerkt haben, ist dies ein Funktionsproblem, das mit iOS 9.0 geliefert wird. Sie haben ein Ding namens App Transport Security hinzugefügt, und auch ich war verärgert, als es meine Apps kaputt machte.

Sie können es mit dem NSAllowsArbitraryLoads-Schlüssel auf YES unter dem NSAppTransportSecurity-Wörterbuch in Ihrer .plist-Datei verbinden, aber letztendlich müssen Sie den Code, der Ihre URLs bildet, neu schreiben, um das Präfix HTTPS: // zu bilden.

Apple hat die NSUrlConnection-Klasse in iOS 9.0 neu geschrieben. Sie können darüber in NSURLConnection lesen .

Andernfalls müssen Sie möglicherweise von iOS 9.0 zurücktreten, bis Sie Zeit haben, die richtige Lösung zu implementieren.

Mark DeWald
quelle