2015-06-10 12 views
27

Gemäß der Dokumentation von https://developer.apple.com/library/content/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html#//apple_ref/doc/uid/TP40016198-SW14, Kräften Apple-HTTPS über iOS 9.iOS9 ATS: Was ist mit HTML5-basierten Apps?

App Transport Security

App Transport Security (ATS) in HTTP zu verwenden, kann eine App eine Erklärung zu seiner Info hinzufügen .plist-Datei, die die Domänen angibt, mit denen eine sichere Kommunikation erforderlich ist. ATS verhindert die versehentliche Offenlegung, bietet sicheres Standardverhalten und ist einfach zu implementieren. Sie sollten ATS so schnell wie möglich übernehmen, unabhängig davon, ob Sie eine neue App erstellen oder eine bestehende aktualisieren.

Wenn Sie eine neue App entwickeln, sollten Sie ausschließlich HTTPS verwenden. Wenn Sie über eine vorhandene App verfügen, sollten Sie HTTPS so gut wie möglich verwenden und einen Plan für die Migration der übrigen App so bald wie möglich erstellen.

Was bedeutet das für Web-Anwendungen, insb. Sencha Touch und Cordova/PhoneGap basierte? Meine Web-App kann auf beliebige Server-Adresse konfiguriert werden, also gibt es keine Möglichkeit, ich kann sie in einer PLIST-Datei Whitelist. Wird dies nur für Anwendungen gelten, die native Anforderungen verwenden (über NSURLRequest usw.)?

+0

es funktioniert nicht für iOS 9.3 – nickalchemist

+0

Ja die folgenden Antworten funktionieren nicht für iOS 9.3. Also endete ich mit dieser funktionierenden Lösung, um lokale Dateien zu laden: [MySolution] (http://stackoverflow.com/questions/33773877/not-allowed-to-load-local-resource-ios9-cordova-app/38024669#38024669) –

Antwort

14

Wenn Sie nicht sicher sind, mit welcher URL Ihre Anwendung eine Verbindung herstellt oder wenn Sie eine Verbindung zu vielen URLs herstellen, können Sie die ATS (App Transport Security) umgehen, indem Sie die folgenden Schlüssel in der Datei info.plist hinzufügen.

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

Als Kopf - wenn Sie eine hybride Anwendung entwickeln (zB cordova), als Sie vielleicht hinzufügen müssen, wenn Sie über localhost testen –

+1

Gibt es eine empfohlene Möglichkeit, dies in einer Cordova App hinzuzufügen? – jsharpe

+0

Die Art, wie ich es gerade mache, ist, die PLIST-Datei im generierten xcode-Projekt zu öffnen, aber ich denke, Sie können es aus der config.xml tun, ich bin noch dies zu versuchen –

7

Wie mit der SSL in iOS9 beschäftigen, ist eine Lösung zu tun:

Als Apple sagen: enter image description here enter image description here

enter image description here

iOS 9 und OSX 10.11 erfordert TLSv1.2 SSL für alle Hosts, von denen Sie Daten anfordern möchten, es sei denn, Sie geben im I der Anwendung Ausnahmedomänen an nfo.plist-Datei.

Die Syntax für die Info.plist Konfiguration sieht wie folgt aus:

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSExceptionDomains</key> 
    <dict> 
    <key>yourserver.com</key> 
    <dict> 
     <!--Include to allow subdomains--> 
     <key>NSIncludesSubdomains</key> 
     <true/> 
     <!--Include to allow insecure HTTP requests--> 
     <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> 
     <true/> 
     <!--Include to specify minimum TLS version--> 
     <key>NSTemporaryExceptionMinimumTLSVersion</key> 
     <string>TLSv1.1</string> 
    </dict> 
    </dict> 
</dict> 

Wenn Ihre Anwendung (ein Drittanbieter-Web-Browser, zum Beispiel) zu beliebigen Hosts verbinden muss, können Sie es so konfigurieren können, :

<key>NSAppTransportSecurity</key> 
<dict> 
    <!--Connect to anything (this is probably BAD)--> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
</dict> 

wenn Sie dies zu tun haben soll, ist es wahrscheinlich am besten Ihre Server zu aktualisieren TLSv1.2 und SSL zu verwenden, wenn sie dies nicht bereits tun. Dies sollte als vorübergehende Problemumgehung betrachtet werden.

Ab sofort enthält die Vorabversionsdokumentation keine dieser Konfigurationsoptionen in einer bestimmten Weise. Sobald dies der Fall ist, aktualisiere ich die Antwort, um die relevante Dokumentation zu verlinken.Hier

ist ein Demo(Demo1)

17

Try this: cordova plugin add https://github.com/robertklein/cordova-ios-security.git

Es wird der folgende Teil auf die *-Info.plist Datei während des Bauprozesses hinzufügen:

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

Für jeden, der Ionic mit iOS9 verwendet, löste dies auch einen weißen Bildschirm des Todes. –

+0

Vielen Dank, das hat für mich funktioniert. – user3329922

+0

Schön, funktioniert gut –

0

von Apple eigentlich nichts erzwingen, Sie haben einfach ein Framework-Setup, um die Sicherheit zu erhöhen und dadurch die Sicherheit der App und der Benutzer ihrer Dienste zu erhöhen. Dies bedeutet, dass, bis das Hybridwerkzeug die Details in bestehende Produkte integriert, Anpassungen an the appropriate configuration files with some understanding of the details (see linked answer+comment below it) vorgenommen werden müssen. Nachdem ich Zeit mit genau diesem Problem verbracht habe, empfehle ich zunächst, lokal zu arbeiten, um willkürliche Lasten zuzulassen und ATS zu umgehen. Wenn ATS für die App-Store-Genehmigung benötigt wird, schalten Sie ATS ein, wenn Sie mit einer größeren Gruppe von Benutzern testen möchten, und schalten Sie die Ausnahmen nach Bedarf auf die Standardeinstellungen um. Die wichtigste Frage, die Sie für jede Domäne stellen müssen, ist, ob Sie Subdomänen zulassen, TLS-Versionen nach Bedarf anpassen und ob auch unsichere HTTP-Adressen zulässig sind. Meine App verfügt über 20 Domains mit der Absicht, andere Anfragen an andere Apps weiterzuleiten. Wenn es ein Webbrowser wäre, hätte ich spezielle Einstellungen für meine Dienste (die ich kontrolliere und kenne) und erlaube den Rest, willkürlich zu sein.