Pengaturan apa yang harus saya masukkan info.plist
ke saya untuk mengaktifkan mode HTTP sesuai dengan pesan kesalahan berikut?
Keamanan transportasi telah memblokir sumber daya HTTP (http: //) cleartext karena tidak aman. Pengecualian sementara dapat dikonfigurasikan melalui file Info.plist aplikasi Anda.
Asumsikan domain saya adalah example.com
.
Allow arbitary loads
). Segera ini tidak akan mungkin karena Apple akan membutuhkan ATS (Awalnya akhir tahun - batas waktu telah diperpanjang) - developer.apple.com/news/?id=12212016bJawaban:
Jika Anda menggunakan Xcode 8.0+ dan Swift 2.2+ atau bahkan Objective C:
sumber
NSAllowsArbitraryLoads
diaturtrue
? Anda menumbangkan tujuan ATS. Lihat juga Kode paling berbahaya di dunia: memvalidasi sertifikat SSL dalam perangkat lunak non-browser . Perangkat lunak Anda baru saja membuat daftar.Gunakan NSAppTransportSecurity:
Anda harus mengatur kunci NSAllowsArbitraryLoads ke YA di bawah kamus NSAppTransportSecurity di file info.plist Anda.
sumber
Berikut adalah pengaturan secara visual:
sumber
Lihat posting forum Keamanan Transport Aplikasi? .
Juga halaman Mengkonfigurasi Pengecualian Keamanan Transport Aplikasi di iOS 9 dan OSX 10.11 .
Misalnya, Anda dapat menambahkan domain tertentu seperti:
Opsi malas adalah:
catatan:
info.plist
adalah file XML sehingga Anda dapat menempatkan kode ini lebih atau kurang di mana saja di dalam file.sumber
Ini diuji dan berfungsi pada iOS 9 GM seed - ini adalah konfigurasi untuk memungkinkan domain tertentu untuk menggunakan HTTP, bukan HTTPS:
NSAllowsArbitraryLoads
harusfalse
, karena itu melarang semua koneksi tidak aman, tetapi daftar pengecualian memungkinkan koneksi ke beberapa domain tanpa HTTPS.sumber
Ini adalah solusi cepat (tetapi tidak disarankan) untuk menambahkan ini di daftar:
Yang berarti (menurut dokumentasi Apple ):
Saya sangat merekomendasikan tautan:
yang membantu saya memahami alasan dan semua implikasinya.
XML (dalam file Info.plist) di bawah ini akan:
larang panggilan sewenang-wenang untuk semua halaman, tetapi untuk
PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE
memungkinkan koneksi menggunakan protokol HTTP.Untuk XML di atas Anda dapat menambahkan:
jika Anda ingin mengizinkan koneksi tidak aman untuk subdomain dari alamat yang ditentukan.
Pendekatan terbaik adalah memblokir semua muatan yang berubah-ubah (disetel ke false) dan menambahkan pengecualian agar hanya alamat yang kami tahu baik-baik saja.
Untuk pembaca yang tertarik
Pembaruan 2018:
Apple tidak merekomendasikan untuk mematikan ini - informasi lebih lanjut dapat ditemukan di 207 sesi WWDC 2018 dengan lebih banyak hal yang dijelaskan sehubungan dengan keamanan
Meninggalkan jawaban asli karena alasan historis dan fase pengembangan
sumber
NSAllowsArbitraryLoads
harusfalse
<key>NSIncludesSubdomains</key> <true/>
? Apakah setiap pengaturan harus dikelilingi oleh<dict>
? bagaimana Anda mengedit file plist ini? Apa formatnya? : D Terima kasih.Bagi Anda yang menginginkan konteks lebih banyak tentang mengapa hal ini terjadi, selain cara memperbaikinya, maka baca di bawah ini.
Dengan diperkenalkannya iOS 9, untuk meningkatkan keamanan koneksi antara aplikasi dan layanan web, koneksi aman antara aplikasi dan layanan webnya harus mengikuti praktik terbaik . Perilaku praktik terbaik diberlakukan oleh App Transport Security untuk:
Sebagaimana dijelaskan dalam App Transport Security Technote , saat berkomunikasi dengan layanan web Anda, App Transport Security sekarang memiliki persyaratan dan perilaku berikut:
Dengan kata lain, permintaan layanan web Anda harus: a.) Menggunakan HTTPS dan b.) Dienkripsi menggunakan TLS v1.2 dengan kerahasiaan ke depan.
Namun, seperti yang disebutkan dalam posting lain, Anda dapat mengganti perilaku baru ini dari Keamanan Transport Aplikasi dengan menentukan domain tidak aman di
Info.plist
aplikasi Anda.Untuk mengganti, Anda perlu menambahkan
NSAppTransportSecurity
>NSExceptionDomains
properti kamus keInfo.plist
. Selanjutnya, Anda akan menambahkan domain layanan web Anda keNSExceptionDomains
kamus.Misalnya, jika saya ingin mem-bypass perilaku App Transport Security untuk layanan web di host www.yourwebservicehost.com maka saya akan melakukan hal berikut:
Buka aplikasi Anda dalam Xcode.
Temukan
Info.plist
file di Project Navigator dan klik "mouse kanan" dan pilih opsi menu Open As > Source Code . File daftar properti akan muncul di panel kanan.Letakkan blok properti berikut di dalam kamus properti utama (di bawah yang pertama
<dict>
).Jika Anda perlu memberikan pengecualian untuk domain tambahan maka Anda akan menambahkan properti kamus lain di bawah
NSExceptionDomains
.Untuk mengetahui lebih lanjut tentang kunci yang dirujuk di atas, baca teknik yang telah disebutkan ini .
sumber
./platforms/ios/<project>/<project>-Info.plist
denganNSAllowsArbitraryLoads=false
dan banyak domain pengecualian untuk layanan dengan beragam kombinasi TLS / HTTP / HTTPS. Awalnya digunakanNSAllowsArbitraryLoads=true
kemudian disesuaikan, pemecahan masalah aturan melalui coba-coba untuk mematuhi pedoman dan mengajukan persetujuan. Catatanconfig.xml
<access origin=.../>
pernyataan mengisi sebagian file ini, tetapi saat ini membutuhkan penyesuaian dengan pengeditan langsung atau melalui XCode untuk mendapatkan rincian yang benar.<access origin="*"/>
(dalam config.xml) setNSAllowsArbitraryLoads=true
(untuk aplikasi Cordova / Phonegap / hybridNSExceptionAllowsInsecureHTTPLoads
diaturtrue
? Anda menumbangkan tujuan ATS. Lihat juga Kode paling berbahaya di dunia: memvalidasi sertifikat SSL dalam perangkat lunak non-browser . Perangkat lunak Anda baru saja membuat daftar.Saya tidak suka mengedit daftar langsung. Anda dapat dengan mudah menambahkannya ke plist menggunakan GUI:
Sekarang ubah data di area utama:
Add Row
sumber
NSAllowsArbitraryLoads
diaturYES
? Anda menumbangkan tujuan ATS. Lihat juga Kode paling berbahaya di dunia: memvalidasi sertifikat SSL dalam perangkat lunak non-browser . Perangkat lunak Anda baru saja membuat daftar.Ada dua solusi untuk ini:
Solusi 1:
Info.plist
file, tambahkan kamus dengan kunci 'NSAppTransportSecurity
''Allow Arbitrary Loads'
Plist
struktur akan muncul seperti yang ditunjukkan pada gambar di bawah ini.Solusi 2:
Info.plist
file, tambahkan kamus dengan kunci 'NSAppTransportSecurity
'NSExceptionDomains
''MyDomainName.com'
tipe NSDictionaryNSIncludesSubdomains
' dari jenisBoolean
dan nilai yang ditetapkan sebagaiYES
NSTemporaryExceptionAllowsInsecureHTTPLoads
' dari jenisBoolean
dan nilai yang ditetapkan sebagaiYES
Plist
struktur akan muncul seperti yang ditunjukkan pada gambar di bawah ini.Solusi 2 lebih disukai karena hanya memungkinkan domain yang dipilih sedangkan solusi 1 memungkinkan semua koneksi HTTP tidak aman.
sumber
NSAllowsArbitraryLoads
diaturYES
? Anda menumbangkan tujuan ATS. Lihat juga Kode paling berbahaya di dunia: memvalidasi sertifikat SSL dalam perangkat lunak non-browser . Perangkat lunak Anda baru saja membuat daftar.Keamanan transportasi tersedia di iOS 9.0 atau yang lebih baru. Anda mungkin memiliki peringatan ini ketika mencoba memanggil WS di dalam aplikasi Anda:
Menambahkan berikut ini ke Info.plist Anda akan menonaktifkan ATS:
sumber
Contoh Pengembangan
Berikut adalah screenshot dari sebuah plist yang membuat ATS tetap utuh (= aman), tetapi memungkinkan koneksi ke localhost dapat dilakukan melalui HTTP, bukan HTTPS . Ia bekerja di Xcode 7.1.1.
sumber
NSExceptionAllowsInsecureHTTPLoads - YES
konfigurasi default ?Buka Info.plist Anda
sumber
NSAllowsArbitraryLoads
diaturtrue
? Anda menumbangkan tujuan ATS. Lihat juga Kode paling berbahaya di dunia: memvalidasi sertifikat SSL dalam perangkat lunak non-browser . Perangkat lunak Anda baru saja membuat daftar.Menurut Apple, umumnya menonaktifkan ATS akan menyebabkan penolakan aplikasi, kecuali jika Anda memiliki alasan yang kuat untuk melakukannya. Meskipun begitu, Anda harus menambahkan pengecualian untuk domain yang dapat Anda akses dengan aman.
Apple memiliki alat luar biasa yang memberi tahu Anda dengan tepat pengaturan apa yang harus digunakan: Di Terminal, masukkan
dan nscurl akan memeriksa apakah permintaan ini gagal, dan kemudian mencoba berbagai pengaturan dan memberi tahu Anda yang mana yang lewat, dan apa yang harus dilakukan. Misalnya, untuk beberapa URL pihak ketiga yang saya kunjungi, perintah ini memberi tahu saya bahwa kamus ini lewat:
Untuk membedakan antara situs Anda sendiri dan situs pihak ketiga yang berada di luar kendali Anda, gunakan, misalnya, tombol NSThirdPartyExceptionRequiresForwardSecrecy.
sumber
NSExceptionAllowsInsecureHTTPLoads = true;
, tetapi ternyata tidak diperlukan.Mencari tahu pengaturan apa yang digunakan dapat dilakukan secara otomatis, sebagaimana disebutkan dalam teknik ini :
sumber
CATATAN: Domain pengecualian di plist Anda harus dalam RENDAH-KASUS.
Contoh: Anda telah memberi nama mesin Anda "MyAwesomeMacbook" di bawah Pengaturan-> Berbagi; server Anda (untuk tujuan pengujian) berjalan di MyAwesomeMacbook.local: 3000, dan aplikasi Anda perlu mengirim permintaan ke http: //MyAwesomeMacbook.local: 3000 / file ..., daftar Anda, Anda harus menentukan "myawesomemacbook. lokal "sebagai domain pengecualian.
-
Info Anda akan berisi ...
sumber
Menggunakan:
Tambahkan item baru, NSAppTransportSecurity , dalam file plist dengan jenis Kamus , kemudian tambahkan sub item NSAllowsArbitraryLoads dalam kamus tipe Boolean , dan tetapkan nilai bool YA . Ini bekerja untuk saya.
sumber
Pada 2015-09-25 (setelah pembaruan Xcode pada 2015-09-18):
Saya menggunakan metode non-malas, tetapi tidak berhasil. Berikut ini adalah percobaan saya.
Pertama,
Dan kedua,
Akhirnya, saya menggunakan metode malas:
Mungkin agak tidak aman, tetapi saya tidak dapat menemukan solusi lain.
sumber
NSAllowsArbitraryLoads
diaturtrue
? Anda menumbangkan tujuan ATS. Lihat juga Kode paling berbahaya di dunia: memvalidasi sertifikat SSL dalam perangkat lunak non-browser . Perangkat lunak Anda baru saja membuat daftar.Di swift 4 dan xocde 10 adalah mengubah NSAllowsArbitraryLoads untuk Memungkinkan Beban Sewenang-wenang. jadi akan terlihat seperti ini:
sumber
Mungkin layak disebutkan bagaimana menuju ke sana ...
Info.plist adalah salah satu file di bawah Main.storyboard atau viewController.swift.
Ketika Anda mengkliknya pertama kali, biasanya dalam format tabel, jadi klik kanan file dan 'open as' Source code dan kemudian tambahkan kode di bawah ini sampai akhir, yaitu:
Salin tempelkan kode tepat di atas
yang pada akhirnya.
sumber
NSAllowsArbitraryLoads
diaturtrue
? Anda menumbangkan tujuan ATS. Lihat juga Kode paling berbahaya di dunia: memvalidasi sertifikat SSL dalam perangkat lunak non-browser . Perangkat lunak Anda baru saja membuat daftar.Pembaruan untuk Xcode 7.1, menghadapi masalah 27.10.15:
Nilai baru di Info.plist adalah "Pengaturan Keamanan Transport Transport". Dari sana, kamus ini harus berisi:
sumber
Bagi mereka yang datang ke sini mencoba mencari alasan mengapa WKWebView mereka selalu berwarna putih dan tidak memuat apa pun (persis seperti yang dijelaskan di sini bagaimana cara membuat WKWebView bekerja dengan cepat dan untuk Aplikasi MacOS ):
Jika semua ilmu roket di atas tidak berfungsi untuk Anda periksa yang jelas: pengaturan kotak pasir
Menjadi baru untuk cepat dan kakao, tetapi cukup berpengalaman dalam pemrograman saya menghabiskan sekitar 20 jam untuk menemukan solusi ini. Tak satu pun dari lusinan tutorial hipster-iOS atau intisari apel - tidak ada yang menyebutkan kotak centang kecil ini.
sumber
Secara default, iOS hanya membolehkan API HTTPS. Karena HTTP tidak aman, Anda harus menonaktifkan keamanan transportasi App. Ada dua cara untuk menonaktifkan ATS: -
Klik proyek pada proyek di panel kiri, pilih proyek sebagai target dan pilih tab info. Anda harus menambahkan kamus di struktur berikut.
sumber
sumber
Menggunakan
NSExceptionDomains
mungkin tidak menerapkan efek secara bersamaan karena situs target dapat memuat sumber daya (misalnyajs
file) dari domain eksternal berakhirhttp
. Itu dapat diatasi dengan menambahkan domain eksternal iniNSExceptionDomains
juga.Untuk memeriksa sumber daya mana yang tidak dapat dimuat coba gunakan debugging jarak jauh. Ini tutorialnya: http://geeklearning.io/apache-cordova-and-remote-debugging-on-ios/
sumber
Untuk Cordova, jika Anda ingin menambahkannya ke ios.json Anda, lakukan hal berikut:
Dan itu harus di dalam:
sumber
NSAllowsArbitraryLoads
diaturtrue
? Anda menumbangkan tujuan ATS. Lihat juga Kode paling berbahaya di dunia: memvalidasi sertifikat SSL dalam perangkat lunak non-browser . Perangkat lunak Anda baru saja membuat daftar.Seperti banyak yang telah dicatat, ini adalah masalah fitur yang datang dengan iOS 9.0. Mereka telah menambahkan sesuatu yang disebut Keamanan Transportasi Aplikasi, dan saya juga merasa terganggu ketika itu merusak Aplikasi saya.
Anda dapat membalutnya dengan kunci NSAllowsArbitraryLoads ke YA di bawah kamus NSAppTransportSecurity dalam file .plist Anda, tetapi pada akhirnya Anda harus menulis ulang kode yang membentuk URL Anda untuk membentuk HTTPS: // awalan.
Apple telah menulis ulang kelas NSUrlConnection di iOS 9.0. Anda dapat membacanya di NSURLConnection .
Selain itu, Anda mungkin harus mundur dari iOS 9.0 hingga Anda punya waktu untuk mengimplementasikan solusi yang benar.
sumber