Bagaimana cara menambahkan NSAppTransportSecurity ke file info.plist saya?

124

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

Sepertinya saya tidak bisa menambahkan ini ke info.plist saya. Tidak ada nilainya. Saya menjalankan XCode Versi 7.0 beta (7A121l), dan menguji di iOS9.

Karena saya tidak bisa secara spesifik menyatakan URL apa yang saya inginkan seperti yang terlihat di video, saya terus mendapatkan pesan "App Transport Security telah memblokir pemuatan resource HTTP (http: //) cleartext karena tidak aman. Pengecualian sementara dapat dikonfigurasi melalui aplikasi Anda File info.plist ".

Namun, sepertinya saya tidak dapat mengkonfigurasinya. Ada ide?

chris P
sumber
Anda tidak benar-benar memiliki pertanyaan lagi, Anda harus langsung menjawab pertanyaan Anda sendiri dan kemudian menerima setelah penundaan waktu yang sesuai.
Norman H
apa itu nama domain? apakah ini url basis server atau lainnya? dan di mana menemukan nama domain aplikasi saya?
Nik
Nama domain adalah salah satu istilah yang paling umum digunakan. Nah ini adalah salah satu yang dibeli dan kemudian setelah hosting Anda dapat menggunakannya sebagai url basis server yang Anda gunakan untuk API. Tidak ada yang seperti nama domain aplikasi. Jadi Anda bisa menggunakan nama domain sebagai tempat API ditulis.
Ashish

Jawaban:

131

coba Dengan ini --- bekerja untuk saya di 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>

Juga satu opsi lagi, jika Anda ingin menonaktifkan ATS, Anda dapat menggunakan ini:

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

Tapi ini sama sekali tidak disarankan. Server harus memiliki sertifikat SSL dan agar tidak ada kebocoran privasi.

Ashish
sumber
Saya memiliki XCode 7.2 (7C68) dan saya telah memodifikasi (dengan menonaktifkan sepenuhnya ATS) info.plist proyek pengujian saya. Tapi itu tidak berhasil. Ada petunjuk?
Sanandrea
umumnya itu berhasil ... dapatkah Anda menempelkan kode Anda di sini dan kemudian kita dapat melihat
Ashish
Dan juga jika Anda memiliki dua atau lebih domanis Anda harus menambahkan <key>NSAllowsArbitraryLoads</key> <true/><key>NSExceptionDomains</key> Jika tidak bagi saya itu tidak berfungsi untuk versi rilis karena alasan tertentu
P. Lorand
90

Anda harus menambahkan hanya kunci NSAllowsArbitraryLoads ke YES di kamus NSAppTransportSecurity di file info.plist Anda.

Sebagai contoh,

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

masukkan deskripsi gambar di sini

Hiren Varu
sumber
1
Ini adalah solusi. Masalah sebenarnya adalah kematian dengan jawaban @ Ashish
judepereira
45

Itu tidak berhasil untuk saya, tapi ini berhasil:

<key>NSAppTransportSecurity</key>  
     <dict>  
          <key>NSAllowsArbitraryLoads</key><true/>  
     </dict>  
Polisi
sumber
Saya pikir yang Anda maksud <true/>alih-alih<YES/>
Clifton Labrum
1
Dari sudut pandang keamanan, ini persis cara, bagaimana JANGAN melakukannya, karena tidak ada yang akan meninjau bagian kode ini dan memperbaruinya ke domain yang ditentukan dengan benar.
igraczech
1
Ini bukan praktik yang baik. Sebaliknya kita harus mengizinkan domain tertentu.
Ashish
1
Untuk pemula lainnya seperti saya: Pastikan untuk meletakkan ini di posisi yang benar (di akhir, dilampiri oleh tag </dict>dan </plist>:
Pwdr
21

Hanya untuk memperjelas ... Anda harus selalu menggunakan httpS

Tapi Anda bisa melewati itu dengan menambahkan pengecualian:

masukkan deskripsi gambar di sini

Manuel Pardo
sumber
9

Xcode 8.2, iOS 10

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

Perbarui Jawaban (setelah wwdc 2016):

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

App Transport Security, atau ATS, adalah fitur yang diperkenalkan Apple di iOS 9. Saat ATS diaktifkan, ini memaksa aplikasi untuk terhubung ke layanan web melalui koneksi HTTPS daripada HTTP yang tidak aman.

Namun, pengembang masih dapat menonaktifkan ATS dan mengizinkan aplikasi mereka mengirim data melalui koneksi HTTP seperti yang disebutkan dalam jawaban di atas. Di akhir tahun 2016, Apple akan mewajibkan ATS untuk semua pengembang yang ingin mengirimkan aplikasinya ke App Store. tautan

Paraneetharan Saravanaperumal
sumber
setelah akhir tahun ini, aplikasi baru atau aplikasi pembaruan tanpa menggunakan https akan ditolak. bagaimana dengan aplikasi yang sudah ada dengan bypass? (kami memerlukan pembaruan kekuatan?)
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>

Ini akan memungkinkan Anda untuk terhubung ke .com .net .org

Subirdcom
sumber
Terima kasih atas contoh yang menunjukkan cara menambahkan beberapa domain.
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
sumber
1

Untuk menjelaskan sedikit lebih banyak tentang jawaban ParaSara: Keamanan App Transport akan menjadi wajib dan mencoba menonaktifkannya dapat membuat aplikasi Anda ditolak.

Sebagai pengembang, Anda dapat menonaktifkan keamanan App Transport jika kode jaringan Anda tidak berfungsi dengannya, dan Anda ingin melanjutkan pengembangan lain sebelum memperbaiki masalah. Katakanlah dalam tim yang terdiri dari lima orang, empat orang dapat terus mengerjakan hal-hal lain sementara yang satu memperbaiki semua masalah. Anda juga dapat menonaktifkan keamanan App Transport sebagai alat debugging jika Anda memiliki masalah jaringan dan Anda ingin memeriksa apakah itu disebabkan oleh keamanan App Transport. Segera setelah Anda tahu, Anda harus segera menyalakannya kembali.

Solusi yang harus Anda lakukan gunakan di masa mendatang adalah tidak menggunakan http sama sekali, kecuali Anda menggunakan server pihak ketiga yang tidak mendukung https. Jika server Anda sendiri tidak mendukung https, Apple akan bermasalah dengan itu. Bahkan dengan server pihak ketiga, saya tidak berani bertaruh bahwa Apple menerimanya.

Sama dengan berbagai pemeriksaan keamanan server. Pada titik tertentu Apple hanya akan menerima pengecualian yang dapat dibenarkan.

Namun yang terpenting, pertimbangkan ini: Anda membahayakan privasi pelanggan Anda. Itu tidak-tidak besar dalam buku saya. Jangan lakukan itu. Perbaiki kode Anda, jangan meminta izin untuk menjalankan kode yang tidak aman.

gnasher729
sumber
1

Di baris perintah shell mac , gunakan perintah berikut:

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

Perintah tersebut akan menambahkan semua nilai yang diperlukan ke dalam file plist Anda.

Avi Levin
sumber
1

XCODE 8, Swift 3: Anda perlu menambahkan baris: **

"Pengaturan Keamanan Transportasi Aplikasi"

** di info.plist informasi dalam daftar properti.

Robert Juamarcal
sumber
0

Xcode 9.2, Swift 4, ini berfungsi untuk saya.

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