Wie kann ich NSAppTransportSecurity zu meiner info.plist-Datei hinzufügen?

124

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

Ich kann dies anscheinend nicht zu meiner info.plist hinzufügen. Es gibt keinen Wert dafür. Ich verwende XCode Version 7.0 Beta (7A121l) und teste auf iOS9.

Da ich nicht genau angeben kann, welche URLs im Video angezeigt werden sollen, wird immer wieder angezeigt, dass App Transport Security das Laden von HTTP-Ressourcen (http: //) im Klartext blockiert hat, da diese unsicher sind. Temporäre Ausnahmen können über die App konfiguriert werden Info.plist Datei "Fehler.

Ich scheine es jedoch nicht konfigurieren zu können. Irgendwelche Ideen?

chris P.
quelle
Sie haben nicht mehr wirklich eine Frage, Sie sollten einfach Ihre eigene Frage beantworten und dann nach der entsprechenden Zeitverzögerung akzeptieren.
Norman H
Was ist ein Domainname? Ist dies eine Server-Basis-URL oder eine andere? und wo finde ich meinen App Domain Namen?
Nik
Domain Name ist einer der am häufigsten verwendeten Begriffe. Nun, dies ist eine, die gekauft wird und nach dem Hosting können Sie sie als Server-Basis-URL verwenden, die Sie für APIs verwenden. Es gibt nichts Schöneres als einen App-Domainnamen. Sie können also den Domänennamen als den Namen verwenden, in den APIs geschrieben werden.
Ashish

Antworten:

131

versuche damit --- hat bei mir in Xcode-beta 4 7.0 funktioniert

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

Wenn Sie ATS deaktivieren möchten, können Sie Folgendes verwenden:

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

Dies wird jedoch überhaupt nicht empfohlen. Der Server sollte über die SSL-Zertifikate verfügen, damit keine Datenschutzlecks auftreten.

Ashish
quelle
Ich habe XCode 7.2 (7C68) und die Info-Liste meines Testprojekts geändert (durch vollständiges Deaktivieren von ATS). Aber es funktioniert nicht. Irgendeine Ahnung?
Sanandrea
Im Allgemeinen funktioniert es ... können Sie Ihren Code hier einfügen und dann können wir sehen
Ashish
Und auch wenn Sie zwei oder mehr Domanis haben, müssen Sie hinzufügen. <key>NSAllowsArbitraryLoads</key> <true/><key>NSExceptionDomains</key> Andernfalls funktionierte es für mich aus irgendeinem Grund nicht für die Release-Version
P.Lorand
90

Sie müssen YES im NSAppTransportSecurity-Wörterbuch in Ihrer Datei info.plist nur den Schlüssel NSAllowsArbitraryLoads hinzufügen.

Beispielsweise,

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

Geben Sie hier die Bildbeschreibung ein

Hiren Varu
quelle
1
Dies ist eine Problemumgehung. Das eigentliche Problem ist der Tod mit in @
Ashishs
45

Das hat bei mir nicht funktioniert, aber das hat den Trick gemacht:

<key>NSAppTransportSecurity</key>  
     <dict>  
          <key>NSAllowsArbitraryLoads</key><true/>  
     </dict>  
Bobby
quelle
Ich denke du meinst <true/>statt<YES/>
Clifton Labrum
1
Aus Sicherheitsgründen ist dies genau eine Möglichkeit, dies NICHT zu tun, da niemand diesen Codeabschnitt jemals überprüfen und auf ordnungsgemäß angegebene Domänen aktualisieren wird.
igraczech
1
Dies ist keine gute Praxis. Vielmehr sollten wir bestimmte Domänen zulassen.
Ashish
1
Für andere Neulinge wie mich: Stellen Sie sicher, dass Sie dies an der richtigen Position platzieren (am Ende, eingeschlossen durch die vorhandenen </dict>und </plist>Tags:
Pwdr
21

Nur zur Klarstellung ... Sie sollten immer httpS verwenden

Sie können es jedoch umgehen und die Ausnahme hinzufügen:

Geben Sie hier die Bildbeschreibung ein

Manuel Pardo
quelle
9

Xcode 8.2, iOS 10

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
Oleg Malovichko
quelle
4

Antwort aktualisieren (nach wwdc 2016):

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

App Transport Security (ATS) ist eine Funktion, die Apple in iOS 9 eingeführt hat. Wenn ATS aktiviert ist, wird eine App gezwungen, über eine HTTPS-Verbindung eine Verbindung zu Webdiensten herzustellen, anstatt über nicht sicheres HTTP.

Entwickler können ATS jedoch weiterhin ausschalten und ihren Apps erlauben, Daten über eine HTTP-Verbindung zu senden, wie in den obigen Antworten erwähnt. Ende 2016 wird Apple ATS für alle Entwickler verbindlich machen , die hoffen, ihre Apps im App Store einzureichen. Verknüpfung

Paraneetharan Saravanaperumal
quelle
Nach Ende dieses Jahres wird eine neue App oder Update-App ohne Verwendung von https abgelehnt. Was ist mit der vorhandenen App mit dem Bypass? (Wir brauchen ein Force-Update?)
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>

Dadurch kann eine Verbindung zu .com .net .org hergestellt werden

Subirdcom
quelle
Vielen Dank für ein Beispiel, das zeigt, wie mehrere Domänen hinzugefügt werden.
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
quelle
1

Um etwas mehr über die Antwort von ParaSara zu erklären: Die Sicherheit des App-Transports wird obligatorisch. Wenn Sie versuchen, sie auszuschalten, wird Ihre App möglicherweise abgelehnt.

Als Entwickler können Sie die App Transport-Sicherheit deaktivieren, wenn Ihr Netzwerkcode nicht damit funktioniert, und Sie möchten die andere Entwicklung fortsetzen, bevor Sie Probleme beheben. Nehmen wir an, in einem fünfköpfigen Team können vier weiter an anderen Dingen arbeiten, während einer alle Probleme behebt. Sie können die App Transport-Sicherheit auch als Debugging-Tool deaktivieren, wenn Sie Netzwerkprobleme haben und prüfen möchten, ob diese durch die App Transport-Sicherheit verursacht werden. Sobald Sie wissen, sollten Sie es sofort wieder einschalten.

Die Lösung , die Sie müssen in der Zukunft verwenden ist nicht http überhaupt zu benutzen, es sei denn , Sie einen Drittanbieter - Server verwenden , die nicht https unterstützt. Wenn Ihr eigener Server https nicht unterstützt, hat Apple ein Problem damit. Selbst mit Servern von Drittanbietern würde ich nicht wetten, dass Apple dies akzeptiert.

Gleiches gilt für die verschiedenen Überprüfungen der Serversicherheit. Irgendwann akzeptiert Apple nur noch berechtigte Ausnahmen.

Bedenken Sie jedoch vor allem Folgendes: Sie gefährden die Privatsphäre Ihrer Kunden. Das ist ein großes Nein-Nein in meinem Buch. Tu das nicht. Korrigieren Sie Ihren Code und fragen Sie nicht nach der Erlaubnis, unsicheren Code auszuführen.

gnasher729
quelle
1

Verwenden Sie in der Mac Shell-Befehlszeile den folgenden Befehl:

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

Der Befehl fügt alle erforderlichen Werte zu Ihrer plist-Datei hinzu.

Avi Levin
quelle
1

XCODE 8, Swift 3: Sie müssen eine Zeile hinzufügen: **

"Sicherheitseinstellung für App-Transport"

** in der info.plist inside information Eigenschaftsliste.

Robert Juamarcal
quelle
0

Xcode 9.2, Swift 4, das funktioniert bei mir.

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