İnfo.plist dosyama NSAppTransportSecurity'i nasıl ekleyebilirim?


124

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

Bunu info.plisteme ekleyemiyorum. Değeri yok. XCode Sürüm 7.0 beta (7A121l) çalıştırıyorum ve iOS9'da test ediyorum.

Videoda görüldüğü şekliyle istediğim URL'leri özellikle açıklayamadığım için, "App Transport Security, güvenli olmadığı için açık metin HTTP (http: //) kaynak yükünü engelledi. Geçici istisnalar uygulamanızın Info.plist dosyası "hataları.

Ancak, onu yapılandıracak gibi görünmüyorum. Herhangi bir fikir?


Artık gerçekten bir sorunuz yok, sadece devam edip kendi sorunuzu cevaplamalı ve uygun zaman gecikmesinden sonra kabul etmelisiniz.
Norman H

alan adı nedir? bu bir sunucu temel url'si mi yoksa başka biri mi? ve uygulama alan adımı nerede bulabilirim?
Nik

Alan adı, kullanılan en yaygın terimlerden biridir. Peki bu satın alınan bir tanesidir ve daha sonra barındırmadan sonra, API'ler için kullandığınız sunucu temel URL'si olarak kullanabilirsiniz. Uygulama alan adı gibisi yoktur. Böylece alan adını API'lerin yazıldığı alan olarak kullanabilirsiniz.
Ashish

Yanıtlar:


131

Bununla deneyin - benim için Xcode-beta 4 7.0'da çalıştı

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

Ayrıca bir seçenek daha, ATS'yi devre dışı bırakmak istiyorsanız, bunu kullanabilirsiniz:

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

Ancak bu hiç tavsiye edilmiyor. Sunucunun SSL sertifikalarına sahip olması ve böylece gizlilik sızıntısı olmaması gerekir.


XCode 7.2'ye (7C68) sahibim ve test projemin info.plist'i tamamen değiştirdim (ATS'yi tamamen devre dışı bırakarak). Ama bu çalışmıyor. Bir ipucu?
Sanandrea

genel olarak işe yarıyor ... kodunu buraya yapıştırır mısın ve sonra görebiliriz
Ashish

Ayrıca iki veya daha fazla domanınız varsa eklemeniz gerekir <key>NSAllowsArbitraryLoads</key> <true/><key>NSExceptionDomains</key> Aksi takdirde benim için yayın sürümü için herhangi bir nedenle işe yaramadı
P.Lorand

90

İnfo.plist dosyanızdaki NSAppTransportSecurity sözlüğünde YES'e yalnızca NSAllowsArbitraryLoads anahtarını eklemeniz gerekir.

Örneğin,

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

görüntü açıklamasını buraya girin


1
Bu geçici bir çözümdür. Asıl sorun @
Ashish'in cevabında

45

Bu benim için işe yaramadı, ama hile yaptı

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

Sanırım <true/>yerine demek istiyorsun<YES/>
Clifton Labrum

1
Güvenlik açısından bakıldığında, bu tam olarak nasıl YAPILMAMASI gerektiğinin bir yoludur, çünkü hiç kimse bu kod bölümünü gözden geçirmeyecek ve doğru şekilde belirlenmiş etki alanlarına güncellemeyecektir.
igraczech

1
Bu iyi bir uygulama değil. Bunun yerine belirli alanlara izin vermeliyiz.
Ashish

1
Benim gibi diğer yeni başlayanlar için: Bunu doğru konuma yerleştirdiğinizden emin olun (sonunda, mevcut </dict>ve </plist>etiketleriyle birlikte:
Pwdr

21

Sadece açıklığa kavuşturmak için ... Her zaman httpS kullanmalısınız

Ancak, istisnayı ekleyerek atlayabilirsiniz:

görüntü açıklamasını buraya girin


9

Xcode 8.2, iOS 10

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

4

Cevabı Güncelle (WWDC 2016'dan sonra):

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

App Transport Security veya ATS, Apple'ın iOS 9'da sunduğu bir özelliktir. ATS etkinleştirildiğinde, bir uygulamayı güvenli olmayan HTTP yerine bir HTTPS bağlantısı üzerinden web hizmetlerine bağlanmaya zorlar.

Ancak, geliştiriciler yine de ATS'yi kapatabilir ve uygulamalarının yukarıdaki yanıtlarda belirtildiği gibi bir HTTP bağlantısı üzerinden veri göndermesine izin verebilir. 2016 sonunda Apple, uygulamalarını App Store'a göndermeyi uman tüm geliştiriciler için ATS'yi zorunlu hale getirecek . bağlantı


Bu yılın sonunda, https kullanmayan yeni uygulama veya güncelleme uygulaması reddedilecektir. ya baypaslı mevcut uygulama? (Güç güncellemesine ihtiyacımız var mı?)
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>

Bu, .com .net .org'a bağlanmaya izin verecektir.


Birden fazla alanın nasıl ekleneceğini gösteren bir örnek için teşekkür ederiz.
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

ParaSara cevabı hakkında biraz daha açıklamak için: App Taşıma güvenlik edecek zorunlu ve uygulama reddedilen alabilirsiniz kapatmak için çalışıyor olur.

Bir geliştirici olarak, ağ kodunuz onunla çalışmıyorsa App Transport güvenliğini kapatabilir ve herhangi bir sorunu çözmeden önce diğer geliştirmelere devam etmek istiyorsanız. Diyelim ki beş kişilik bir ekipte, biri tüm sorunları düzeltirken dört kişi başka şeyler üzerinde çalışmaya devam edebilir. Ayrıca ağ sorunlarınız varsa ve bunların App Transport güvenliğinden kaynaklanıp kaynaklanmadığını kontrol etmek istiyorsanız, App Transport güvenliğini bir hata ayıklama aracı olarak kapatabilirsiniz. Bildiğiniz anda hemen tekrar açmalısınız.

İleride kullanmanız gereken çözüm, https'yi desteklemeyen üçüncü taraf bir sunucu kullanmadığınız sürece http'yi hiç kullanmamaktır. Kendi sunucunuz https'yi desteklemiyorsa, Apple bununla ilgili bir sorun yaşayacaktır. Üçüncü taraf sunucularla bile, Apple'ın bunu kabul ettiğine bahse girmem.

Sunucu güvenliği için yapılan çeşitli kontrollerle aynı. Bir noktada Apple yalnızca haklı istisnaları kabul edecektir.

Ama çoğunlukla şunu düşünün: Müşterilerinizin mahremiyetini tehlikeye atıyorsunuz. Bu benim kitabımda büyük bir hayır-hayır. Bunu yapma. Kodunuzu düzeltin, güvenli olmayan kodu çalıştırmak için izin istemeyin.



1

Mac kabuk komut satırında aşağıdaki komutu kullanın:

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

Komut, gerekli tüm değerleri plist dosyanıza ekleyecektir.


1

XCODE 8, Swift 3: Bir satır eklemeniz gerekiyor: **

"Uygulama aktarımı Güvenlik Ayarı"

** info.plist içindeki bilgi Özellik listesinde.


0

Xcode 9.2, Swift 4, bu benim için çalışıyor.

<key>App Transport Security Settings</key>
<dict>
    <key>Allow Arbitrary Loads</key>
    <true/>
</dict>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.