2015-06-10 24 views
27

Secondo la documentazione da https://developer.apple.com/library/content/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html#//apple_ref/doc/uid/TP40016198-SW14, le forze di Apple di utilizzare HTTPS su HTTP in iOS 9.iOS9 ATS: che dire delle app basate su HTML5?

App Transport Security

App Transport Security (ATS) consente un app aggiungere una dichiarazione al suo Informazioni .plist file che specifica i domini con i quali ha bisogno di comunicazioni sicure. L'ATS impedisce la divulgazione accidentale, fornisce un comportamento predefinito sicuro ed è facile da adottare. Devi adottare ATS il prima possibile, indipendentemente dal fatto che tu stia creando una nuova app o aggiornando una esistente.

Se si sta sviluppando una nuova app, è necessario utilizzare esclusivamente HTTPS. Se hai un'app esistente, dovresti utilizzare HTTPS il più possibile al momento e creare un piano per la migrazione del resto della tua app il prima possibile.

Che cosa significa per le applicazioni Web, esp. Sencha Touch e Cordova/PhoneGap basati? La mia app Web può essere configurata su qualsiasi indirizzo del server, quindi non è possibile collegarli in un file plist. Sarà applicabile solo per le applicazioni che utilizzano richieste native (tramite NSURLRequest ecc.)?

+0

non funziona per iOS 9.3 – nickalchemist

+0

Sì, le risposte seguenti non funzionano per iOS 9.3. Così ho finito con questa soluzione funzionante per caricare file locali: [MySolution] (http://stackoverflow.com/questions/33773877/not-allowed-to-load-local-resource-ios9-cordova-app/38024669#38024669) –

risposta

14

Se non si è sicuri di quale URL verrà connessa all'applicazione o se ci si connette a più URL, è possibile ignorare ATS (App Transport Security) aggiungendo le seguenti chiavi nel file info.plist.

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

A testa alta - se stai sviluppando un'applicazione ibrida (ad es. Cordova) di quanto potresti dover aggiungere se stai testando su localhost –

+1

Esiste un modo consigliato per aggiungerlo in un'app cordova? – jsharpe

+0

Il modo in cui lo sto facendo adesso è aprire il file plist nel progetto xcode generato, ma penso che puoi farlo dal config.xml, devo ancora provarlo anche se –

7

Come affrontare l'SSL in iOS9, una soluzione è di fare come:

Come il Apple dicono: enter image description here enter image description here

enter image description here

iOS 9 e OSX 10.11 richiede SSL TLSv1.2 per tutti gli host a cui prevedi di richiedere dati, a meno che tu non specifichi domini di eccezione nel I della tua app file nfo.plist.

La sintassi per la configurazione Info.plist assomiglia a questo:

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

Se la vostra applicazione (un browser web di terze parti, per esempio) ha bisogno di collegarsi a host arbitrari, è possibile configurare in questo modo :

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

Se hai per fare questo, è probabilmente meglio per aggiornare i server da utilizzare TLSv1.2 e SSL, se non sono già facendo. Questo dovrebbe essere considerato una soluzione temporanea.

A oggi, la documentazione di prerelease non fa menzione di alcuna di queste opzioni di configurazione in alcun modo specifico. Una volta fatto, aggiornerò la risposta per collegarmi alla documentazione pertinente.

Ecco un Demo(Demo1)

17

Prova questa: cordova plugin add https://github.com/robertklein/cordova-ios-security.git

si aggiungerà la seguente parte al file *-Info.plist durante il processo di compilazione:

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

Per chiunque utilizzi Ionic con iOS9, questo ha risolto anche uno schermo bianco di problemi di morte. –

+0

Grazie mille, questo ha funzionato per me. – user3329922

+0

Bello, funziona bene –

0

di Apple in realtà non forza nulla, hanno semplicemente una configurazione di framework a default e quindi incoraggiano una maggiore sicurezza a vantaggio dell'app e degli utenti dei suoi servizi. Ciò significa che finché gli strumenti ibridi non integrano i dettagli nei prodotti esistenti, è necessario apportare modifiche allo the appropriate configuration files with some understanding of the details (see linked answer+comment below it). Dopo aver passato del tempo con questo esatto problema, suggerisco di sviluppare inizialmente localmente consentendo carichi arbitrari e bypassando ATS. Se ATS è necessario per l'approvazione di app-store, una volta che sei pronto per iniziare a testare con un gruppo più ampio di utenti, attiva ATS (e caricando arbitrariamente i carichi in modo esplicito) quindi regola le eccezioni alle impostazioni predefinite secondo necessità. La domanda principale per chiedere a ciascun dominio è se consentire sottodomini, regolare le versioni TLS secondo necessità e se consentire anche http non sicuro. La mia app ha 20 domini con l'intenzione di passare altre richieste ad altre app. Se fosse un browser avrò impostazioni specifiche per i miei servizi (che controllo e conosco) e consentirò che il resto sia arbitrario.