Come posso aggiungere NSAppTransportSecurity al mio file info.plist?


124

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

Non riesco ad aggiungere questo al mio info.plist. Non c'è valore. Sto eseguendo XCode versione 7.0 beta (7A121l) e sto testando su iOS9.

Poiché non posso dichiarare in modo specifico quale URL desidero come mostrato nel video, continuo a ricevere "App Transport Security ha bloccato un caricamento di risorse HTTP (http: //) in chiaro poiché non è sicuro. È possibile configurare eccezioni temporanee tramite l'app Errori del file Info.plist ".

Tuttavia, non mi sembra di essere in grado di configurarlo. Qualche idea?


Non hai più una domanda, dovresti solo andare avanti e rispondere alla tua domanda e poi accettare dopo il tempo opportuno.
Norman H

cos'è un nome di dominio? è un URL di base del server o qualsiasi altro? e dove trovare il nome di dominio della mia app?
Nik

Il nome di dominio è uno dei termini più comunemente utilizzati. Bene, questo è quello che viene acquistato e quindi dopo l'hosting puoi usarlo come URL di base del server che usi per le API. Non c'è niente come il nome di dominio dell'app. Quindi puoi usare il nome di dominio come quello in cui sono scritte le API.
Ashish

Risposte:


131

prova con questo --- ha funzionato per me in Xcode-beta 4 7.0

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

Anche un'altra opzione, se vuoi disabilitare ATS puoi usare questa:

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

Ma questo non è affatto raccomandato. Il server dovrebbe avere i certificati SSL e in modo che non ci siano perdite di privacy.


Ho XCode 7.2 (7C68) e ho modificato (disabilitando completamente ATS) il file info.plist del mio progetto di test. Ma non sta funzionando. Qualche indizio?
Sanandrea

generalmente funziona ... puoi incollare il tuo codice qui e poi possiamo vedere
Ashish

E anche se hai due o più domanis devi aggiungere <key>NSAllowsArbitraryLoads</key> <true/><key>NSExceptionDomains</key> Altrimenti per me non ha funzionato per la versione di rilascio per qualche motivo
P.Lorand

90

Devi aggiungere solo la chiave NSAllowsArbitraryLoads a YES nel dizionario NSAppTransportSecurity nel tuo file info.plist.

Per esempio,

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

inserisci qui la descrizione dell'immagine


1
Questa è una soluzione alternativa. Il vero problema è la morte con la risposta di @ Ashish
judepereira

45

Non funzionava per me, ma questo ha funzionato:

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

Penso che intendi <true/>invece di<YES/>
Clifton Labrum

1
Dal punto di vista della sicurezza, questo è esattamente un modo, come NON farlo, perché nessuno rivedrà mai questa sezione di codice e la aggiornerà a domini adeguatamente specificati.
igraczech

1
Questa non è una buona pratica. Piuttosto dovremmo consentire domini specifici.
Ashish

1
Per altri neofiti come me: assicurati di metterlo nella posizione corretta (alla fine, racchiuso tra i tag esistenti </dict>e </plist>:
Pwdr

21

Giusto per chiarire ... Dovresti sempre usare httpS

Ma puoi aggirarlo aggiungendo l'eccezione:

inserisci qui la descrizione dell'immagine


9

Xcode 8.2, iOS 10

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

4

Aggiorna risposta (dopo wwdc 2016):

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

App Transport Security, o ATS, è una funzionalità introdotta da Apple in iOS 9. Quando ATS è abilitato, forza un'app a connettersi ai servizi Web tramite una connessione HTTPS anziché HTTP non protetto.

Tuttavia, gli sviluppatori possono comunque disattivare ATS e consentire alle proprie app di inviare dati tramite una connessione HTTP come indicato nelle risposte precedenti. Alla fine del 2016, Apple renderà ATS obbligatorio per tutti gli sviluppatori che sperano di inviare le proprie app all'App Store. collegamento


dopo la fine di quest'anno, la nuova app o l'app di aggiornamento senza utilizzare https verrà rifiutata. che dire delle app esistenti con il bypass? (abbiamo bisogno di un aggiornamento della forza?)
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>

Ciò consentirà di connettersi a .com .net .org


Grazie per un esempio che mostra come aggiungere più domini.
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>

1

Per spiegare un po 'di più su La risposta di Parasara: la sicurezza dei trasporti App sarà diventerà obbligatorio e cercando di spegnerlo può ottenere la vostra app respinto.

In qualità di sviluppatore, puoi disattivare la sicurezza del trasporto app se il tuo codice di rete non funziona con esso e desideri continuare con altri sviluppi prima di risolvere eventuali problemi. Diciamo che in una squadra di cinque, quattro possono continuare a lavorare su altre cose mentre uno risolve tutti i problemi. Puoi anche disattivare la sicurezza del trasporto delle app come strumento di debug se hai problemi di rete e vuoi controllare se sono causati dalla sicurezza del trasporto delle app. Non appena lo sai, dovresti riaccenderlo immediatamente.

La soluzione che devi utilizzare in futuro è di non utilizzare affatto http, a meno che non utilizzi un server di terze parti che non supporta https. Se il tuo server non supporta https, Apple avrà un problema con quello. Anche con server di terze parti, non scommetterei che Apple lo accetti.

Lo stesso vale per i vari controlli per la sicurezza del server. Ad un certo punto Apple accetterà solo eccezioni giustificabili.

Ma soprattutto, considera questo: stai mettendo in pericolo la privacy dei tuoi clienti. Questo è un grande no-no nel mio libro. Non farlo. Correggi il codice, non chiedere l'autorizzazione per eseguire codice non sicuro.



1

Nella riga di comando della shell di mac , utilizzare il seguente comando:

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

Il comando aggiungerà tutti i valori necessari nel tuo file plist.


1

XCODE 8, Swift 3: è necessario aggiungere una riga: **

"Impostazioni di sicurezza per il trasporto delle app"

** nella lista delle proprietà delle informazioni interne info.plist.


0

Xcode 9.2, Swift 4, questo funziona per me.

<key>App Transport Security Settings</key>
<dict>
    <key>Allow Arbitrary Loads</key>
    <true/>
</dict>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.