Aktarım güvenliği açık metin HTTP'yi engelledi


1451

info.plistAşağıdaki hata mesajına göre HTTP modunu etkinleştirmek için hangi ayarı yapmam gerekir ?

Aktarım güvenliği, güvenli olmadığından bir açık metin HTTP (http: //) kaynak yükünü engelledi. Geçici istisnalar uygulamanızın Info.plist dosyası aracılığıyla yapılandırılabilir.

Xcode

Alan adımın olduğunu varsayın example.com.



15
Moderatör Not : Bu soruya zaten 36 cevap var. Başka bir tane eklemeden önce lütfen çözümünüzün yeni olduğundan emin olun .
Matt

5
NOT: Buradaki çözümler ATS'yi kapatmanızı ( Allow arbitary loads) öneririz . Yakında bu mümkün olmayacak çünkü Apple ATS gerektirecek (Başlangıçta yıl sonu - son tarih uzatıldı) - developer.apple.com/news/?id=12212016b
Jakub Truhlář


@Jeef neden iOS 10 etiketi eklediniz? bu konuda iOS 10'da başka değişiklikler oldu mu? İOS9'da tanıtıldığını ve bu etiketin iOS sürümleri açısından yeterli olduğunu hissediyorum
Julian Król 27:18

Yanıtlar:


469

Xcode 8.0+ ve Swift 2.2+ veya hatta Objective C kullanıyorsanız:

Resim açıklamasını buraya girin

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>example.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

29
Neden olarak NSAllowsArbitraryLoadsayarlandı true? ATS'nin amacını bozuyorsunuz. Ayrıca bkz. Dünyadaki en tehlikeli kod: tarayıcı dışı yazılımlarda SSL sertifikalarını doğrulama . Yazılımınız listeyi yeni oluşturdu.
jww

6
@jww Bu yazının amacı bu. Ses çalmak için bağlanmam gereken site henüz HTTPS kullanmıyor ve beklemeye çalışmıyorum.
ThinkDigital

5
Bu, iOS 10.0+ veya MacOS 10.12+ sürümlerinde çalışmaz Aslında, belirtilenler hariç tüm keyfi yüklere izin verildiğini söyler (example.com). Böylece arzu edilenin tersini yapar. NSAllowsArbirtraryLoads burada false değerine ayarlanmalıdır. daha fazla bilgi: Apple belgeleri
Freek Sanders

1
Katılıyorum, neden herkes bunu destekliyor? bir istisna etki alanı ayarlarsanız NSAllowsArbitraryLoads kullanmanın bir anlamı yoktur.
thibaut noah

1
NSAllowsArbitraryLoads öğesinin doğru olması gerekmez, bu nedenle kaldırılması gerekir. NSExceptionDomains, yalnızca bu etki alanına güvenli olmayan bağlantı sağlayan yeterlidir. NSAllowsArbitraryLoads = true, herhangi bir etki alanına güvenli olmayan bağlantı sağlar, bu nedenle hala true değerine ayarlandığında NSExceptionDomains saçmalıklarını zaten tüm etki alanlarını içerecek şekilde yapar
mister_giga

950

NSAppTransportSecurity kullanın:

Resim açıklamasını buraya girin

Sen ayarlamak zorunda NSAllowsArbitraryLoads anahtarı EVET altında NSAppTransportSecurity sizin Info.plist dosyasında sözlüğe.

Liste yapılandırması


157
Bilelim: BU BİR ÇÖZÜMDÜR! HTTPS üzerinden HTTP kullandığınızda, kullanıcı cihazlarınızı güvenlik açıklarına açarsınız. Elbette pek çok durumda olası değildir, ancak etik programlama en iyi uygulamadır. Sadece söylüyorum ... - ayrıca, çalışma için +1 (test amaçlı)
Jacksonkr

36
Bu bir çözüm DEĞİL - bu bir HACK! Bireysel alan adı "istisnalar" eklemek için aşağıdaki yanıta bakın: stackoverflow.com/a/32560433/1103584
DiscDev

17
Bu çözümün savunmasız olduğu bilinmesine rağmen, KALKINMA sırasında önerebileceğim tek çözümdür . Geliştirme sırasında her tam etki alanını yazmak zorunda kalmanız saçmadır (özellikle üçüncü taraf web hizmetlerini kullanıyorsanız).
reTs

6
Bu tuşların adı, "Keyfi
Yüklere

11
Neden bu kadar çok insan bu çözüme karşı çıkıyor? Bu kesinlikle bir kesmek DEĞİLDİR! Birçok uygulamanın, güvenlik protokolünün her zaman kontrolünüz altında olmadığı gerçek internet ile iletişim kurması gerekir. Örneğin, SSL sertifikası olmayan diğer sunuculardan görüntü gösterebilmek çok makul görünmektedir.
Ören

825

Görsel olarak ayarlar şunlardır:

Xcode GUI aracılığıyla info.plist'deki NSAllowsArbitraryLoads için görsel ayarlar


10
O seçeneğim yok.
Kullanıcı

25
Info.plist'inizi doğrudan açarsanız, NSAppTransportSecurity sözlüğünü ekleyebilir ve ardından NSAllowsArbitraryLoads öğesini oluşturabilirsiniz (aşağıdaki Umar Farooq tarafından düzenlenen cevaba bakın).
Stoph

3
Burada da aynı - istisna alanları benim için 7.3 ile çalışmadı.
REGULAREXPRESSION

4
Bu seçenek mevcut değil - XCode 7.3.1
jameshfisher

3
@JoshPinter'den gelen bilgiler XCode 8 ile benim için çalıştı.
Matthew Bellantoni

717

Uygulama Aktarım Güvenliği forum başlığına bakın ? .

Ayrıca, iOS 9 ve OSX 10.11'de Uygulama Aktarımı Güvenlik İstisnalarını Yapılandırma sayfası .

Örneğin, aşağıdaki gibi belirli bir alan adı ekleyebilirsiniz:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>example.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>

Tembel seçenek:

<key>NSAppTransportSecurity</key>
<dict>
  <!--Include to allow all connections (DANGER)-->
  <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>

Not:

info.plist XML dosyasıdır, bu nedenle bu kodu dosyanın içinde herhangi bir yere daha fazla veya daha az yerleştirebilirsiniz.


1
Bunu nasıl yapabilirim, bu kodu nereye yapıştırdığımı bilmediğim için bu kodu Info.plist'e eklemenin yolu nedir?
lmiguelvargasf

2
@lmiguelvargasf info.plist'inizi düz bir metin düzenleyicide açın
Dan Beaulieu

7
Hala hatayı alıyorum: istisna etki alanı ayarlanmış ve NSAllowsArbitraryLoads yanlış. NSAllowsArbitraryLoads true olarak ayarlanmış olsa bile hata görüntülenir. Burada başka kimsede bu sorun var mı?
klaevv

3
1/30/2016 itibarıyla Apple doc, tuşların artık Geçici kelimeye sahip olmadığını gösteriyor, örneğin: NSExceptionAllowsInsecureHTTPLoads NSExceptionMinimumTLSVersion
Philippe Monnet

3
Başka birinin saçını çekmesi durumunda info.plist'deki bu basit değişiklikleri yapmak işe yaramıyor .. değişiklikleri Project> Target> Info> Custom iOS Target Properties'e
ekleyin

330

Bu test edildi ve iOS 9 GM tohumunda çalışıyordu - bu, belirli bir alanın HTTPS yerine HTTP kullanmasına izin veren yapılandırmadır :

<key>NSAppTransportSecurity</key>
<dict>
      <key>NSAllowsArbitraryLoads</key> 
      <false/>
       <key>NSExceptionDomains</key>
       <dict>
            <key>example.com</key> <!--Include your domain at this line -->
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
            </dict>
       </dict>
</dict>

NSAllowsArbitraryLoadsolmalıdır false, çünkü tüm güvenli olmayan bağlantılara izin vermez , ancak istisnalar listesi HTTPS'siz bazı alanlara bağlantıya izin verir .


7
BU cevap olarak işaretlenmelidir. Belirli bir alan adının "tembel" yolu kullanmadan ve uygulamanızı tamamen açmadan http kullanmasına izin vermek için iOS 9 GM tohumunda test edildi ve çalışıyor.
DiscDev

2
Bunu info.plistime nasıl eklerim?
JMStudios.jrichardson

8
Tamam bu girişi info.plistime ekledim ve hala bu hatayı alıyorum - "Uygulama Aktarım Güvenliği, güvenli olmadığı için açık metinli bir HTTP (http: //) kaynak yükünü engelledi. Geçici istisnalar uygulamanızın Bilgisi aracılığıyla yapılandırılabilir .plist dosyası. "
KMC

2
@RomanShapovalov bir IP adresi kullanmanız gerekiyorsa, IP adresinin sonuna .xip.io eklemeyi deneyin ve NSExceptionDomains'inize xip.io ekleyin. Bkz xip.io . Geliştirirken (ancak serbest bırakmadığında) doğrudan IP'ye bağlanıyorum ve bu benim için harika çalışıyor.
tpankake

2
Test projemde yanlış info.plist'e koyduğumu anlayana kadar benim için çalışmıyordu. Doğru olana koyduğunuzdan emin olun!
Chucky

144

Bu, plist'e eklemek için hızlı bir çözümdür (ancak önerilmez):

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

Bunun anlamı ( Apple'ın belgelerine göre ):

NSAllowsArbitraryLoads
NSExceptionDomains sözlüğünde listelenmeyen tüm etki alanları için App Transport Security'yi devre dışı bırakmak için kullanılan bir Boolean değeri. Listelenen alan adları, söz konusu alan için belirtilen ayarları kullanır.

Varsayılan NO değeri, tüm bağlantılar için varsayılan App Transport Security davranışını gerektirir.

Bağlantıları gerçekten tavsiye ederim:

nedenleri ve tüm sonuçları anlamama yardımcı olur.

Aşağıdaki XML (Info.plist dosyasında):

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

tüm sayfalar için rasgele çağrılara PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDEizin vermeyin , ancak bunun için bağlantıların HTTP protokolünü kullanmasına izin verir.

Yukarıdaki XML'e şunları ekleyebilirsiniz:

<key>NSIncludesSubdomains</key>
<true/>

belirtilen adresin alt alanları için güvenli olmayan bağlantılara izin vermek istiyorsanız.

En iyi yaklaşım, tüm rastgele yükleri (false olarak ayarlanmış) engellemek ve yalnızca iyi olduğunu bildiğimiz adreslere izin vermek için istisnalar eklemektir.

İlgili okuyucular için

2018 Güncellemesi:

Apple bunu kapatmayı önermiyor - 207 oturum WWDC 2018'de güvenlikle ilgili daha fazla şey açıklanabilir.

Tarihsel nedenlerle ve gelişim evresinde orijinal cevabı bırakmak


1
NSAllowsArbitraryLoadsolmalıfalse
Sound Blaster

@SoundBlaster aşağı oylama için hangi durumda ve yanlış gördüğünüz için?
Julian Król

plist (NSAppTransportSecurity NSAllowsArbitraryLoads) ekleyerek, bir web hizmeti dışında bir web hizmeti iyi çalışıyor, tüm web hizmetleri bir web hizmeti iOS 9'da dahili sunucu hatası (500) döndürüyor, ancak iOS8 veya sonraki sürümlerde iyi çalışıyor
amit gupta

@SoundBlaster bir değişiklik yaptı, şimdi itirazda bulunmamalısınız :)
Julian Król

Teşekkürler, aslında nasıl eklersiniz <key>NSIncludesSubdomains</key> <true/>? Her ortamın çevrelenmesi gerekiyor <dict>mu? bu lanet plist dosyasını nasıl düzenlersin? Biçimlendirme nedir? : D Teşekkür ederim.
Ajan Zebra

116

Bir daha fazla bağlam istiyorum olanlarınız için neden bu oluyor, bunu düzeltmek için nasıl ek olarak, daha sonra aşağıda okuyun.

İOS 9'un piyasaya sürülmesiyle, bir uygulama ve web hizmetleri arasındaki bağlantı güvenliğini artırmak için, bir uygulama ile web hizmeti arasındaki güvenli bağlantıların en iyi uygulamaları izlemesi gerekir . En iyi uygulama davranışı App Transport Security tarafından aşağıdakiler için zorunlu kılınmaktadır :

  • kazara ifşayı önlemek ve
  • güvenli olan varsayılan bir davranış sağlar.

App Transport Security Technote'ta açıklandığı gibi, web hizmetinizle iletişim kurarken App Transport Security artık aşağıdaki gereksinimlere ve davranışlara sahiptir:

  • Sunucunun en azından Aktarım Katmanı Güvenliği (TLS) protokolü 1.2 sürümünü desteklemesi gerekir.
  • Bağlantı şifreleri, ileri gizlilik sağlayanlarla sınırlıdır (aşağıdaki şifrelerin listesine bakın.)
  • Sertifikalar, 2048 bit veya daha büyük RSA anahtarı veya 256 bit veya daha büyük Eliptik Eğri (ECC) anahtarıyla bir SHA256 veya daha iyi imza karma algoritması kullanılarak imzalanmalıdır.
  • Geçersiz sertifikalar sabit bir arızaya neden olur ve bağlantı olmaz.

Başka bir deyişle, web hizmeti isteğiniz: a.) HTTPS kullanmalı ve b.) TLS v1.2 kullanılarak ileri gizlilikle şifrelenmelidir.

Ancak, diğer yayınlarda belirtildiği gibi, uygulamanızın güvenli olmayan alanını belirterek bu yeni davranışı Uygulama Aktarımı Güvenliği'nden geçersiz kılabilirsiniz Info.plist.


Geçersiz kılma için eklemek gerekir NSAppTransportSecurity> NSExceptionDomainsadresinden Müşteri Sözlük özelliklerini Info.plist. Ardından, web hizmetinizin etki alanını NSExceptionDomainssözlüğe ekleyeceksiniz .

Örneğin, ben www.yourwebservicehost.com ana bir web hizmeti için App Transport Güvenlik davranışını atlamak istiyorsanız o zaman ben aşağıdakileri yapmak:

  1. Uygulamanızı Xcode'da açın.

  2. Info.plistProje Gezgini'nde dosyayı bulun ve "sağ fare" üzerine tıklayın ve Farklı > Kaynak Kodu menü seçeneğini seçin. Özellik listesi dosyası sağ bölmede görünecektir.

  3. Aşağıdaki özellikler bloğunu ana özellikler sözlüğünün içine yerleştirin (ilkinin altına <dict>).


<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.example.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

Ek alan adları için istisnalar sağlamanız gerekiyorsa, altına başka bir sözlük özelliği eklersiniz NSExceptionDomains.

Yukarıda atıfta bulunulan tuşlar hakkında daha fazla bilgi için, daha önce bahsedilen bu teknik notu okuyun .


1
Bu, uygulamalarımın 2'sinde çalıştı, ancak 3. bir uygulamada çalışmıyor. Başka bir kişi yukarıdaki düzeltmeyi kullanma ve yine aynı hata iletisini alma durumu ile karşılaştı mı? (ve evet sözlüğü
kodumdaki

En iyi ! Apple bu çözümü kullanarak onayladı
YannSteph

Bu , değişen TLS / HTTP / HTTPS kombinasyonlarına sahip hizmetlere ve birçok istisna etki alanına ./platforms/ios/<project>/<project>-Info.plistsahip bir Cordova / Phonegap / Ionic uygulama düzenleme dosyası için çalıştı NSAllowsArbitraryLoads=false. Başlangıçta kullanılır, NSAllowsArbitraryLoads=truesonra ayarlanır, kurallara uymak ve onay için göndermek için kurallar deneme yanılma yoluyla giderilir. Not config.xml <access origin=.../>ifadeleri bu dosyayı kısmen doldurur, ancak şu anda ayrıntıların doğru olması için doğrudan düzenleme veya XCode aracılığıyla ayarlama yapılması gerekir.
jimmont

Ayrıca <access origin="*"/>(config.xml'de) kümeler NSAllowsArbitraryLoads=true(Cordova / Phonegap / hibrit uygulamalar için
jimmont

Neden olarak NSExceptionAllowsInsecureHTTPLoadsayarlandı true? ATS'nin amacını bozuyorsunuz. Ayrıca bkz. Dünyadaki en tehlikeli kod: tarayıcı dışı yazılımlarda SSL sertifikalarını doğrulama . Yazılımınız listeyi yeni oluşturdu.
jww

67

Ben doğrudan plist düzenlemeyi sevmiyorum. GUI'yi kullanarak kolayca pliste ekleyebilirsiniz:

  • Soldaki Gezgin'de Bilgi.plistesi'ni tıklayın.
  • Şimdi ana alandaki verileri değiştirin:

    • Son satıra +
    • Grubun adını girin: Uygulama Aktarımı Güvenlik Ayarları
    • Gruba sağ tıklayın ve Add Row
    • Rasgele Yüklere İzin Ver'i girin
    • Sağdaki değeri EVET olarak ayarlayın

Misal


Açıklığa kavuşturmak için: "Rasgele Yüklere İzin Ver" EVET ise ve "İstisna Etki Alanları" varsa, izin verilen yükler İstisna Etki Alanları'yla sınırlandırılır. Bu doğru mu?

Uygulamayı bırakmak istersem bunu yapmanın güvenli bir yolu var mı?
Lamour

Hayır . Uygulamanız rastgele yüklemelere izin vererek herhangi bir alana serbestçe bağlanabilir. Güvenlik açısından, beklenmedik ağ kullanımını önlemek için uygulamanın hangi alan / web sitesine bağlanması gerektiğini kontrol etmeli ve sınırlamalısınız.
Raptor

Çoğu uygulama yalnızca bilinen sunuculara yönlendirilir. Bu geliştirici tarafından kontrol edilir. Böylece güvenlik sorunları biliniyor.
Vincent

Neden olarak NSAllowsArbitraryLoadsayarlandı YES? ATS'nin amacını bozuyorsunuz. Ayrıca bkz. Dünyadaki en tehlikeli kod: tarayıcı dışı yazılımlarda SSL sertifikalarını doğrulama . Yazılımınız listeyi yeni oluşturdu.
jww

25

Apple Belgesi 1

Apple Belgesi 2

Bunun için iki çözüm var:

Çözümler 1:

  1. Gelen Info.plistdosyanın 'tuşuyla bir sözlük eklemek NSAppTransportSecurity'
  2. Anahtarla sözlük içine başka bir öğe ekle 'Allow Arbitrary Loads'

Plist yapısı aşağıdaki resimde gösterildiği gibi görünmelidir.

Çözüm 1

Çözüm 2:

  1. Gelen Info.plistdosyanın 'tuşuyla bir sözlük eklemek NSAppTransportSecurity'
  2. ' NSExceptionDomains' Anahtarıyla sözlüğün içine başka bir öğe ekle
  3. 'MyDomainName.com'NSDictionary türü anahtarla öğe ekle
  4. ' NSIncludesSubdomains' Türünde Booleanve değerinde anahtar olarak ayarlanmış öğe ekleYES
  5. ' NSTemporaryExceptionAllowsInsecureHTTPLoads' Türünde Booleanve değerinde anahtar olarak ayarlanmış öğe ekleYES

Plist yapısı aşağıdaki resimde gösterildiği gibi görünmelidir.

Çözüm 2

Çözüm 2, yalnızca seçilen etki alanına izin verirken çözüm 1 tüm güvenli olmayan HTTP bağlantılarına izin verdiği için tercih edilir.


Neden olarak NSAllowsArbitraryLoadsayarlandı YES? ATS'nin amacını bozuyorsunuz. Ayrıca bkz. Dünyadaki en tehlikeli kod: tarayıcı dışı yazılımlarda SSL sertifikalarını doğrulama . Yazılımınız listeyi yeni oluşturdu.
jww

20

Aktarım güvenliği iOS 9.0 veya sonraki sürümlerde kullanılabilir. Uygulamanızın içinde bir WS'yi aramaya çalışırken şu uyarıyı alabilirsiniz:

Application Transport Security, güvensiz olduğu için bir açık metin HTTP (http: //) kaynak yükünü engelledi. Geçici istisnalar uygulamanızın Info.plist dosyası aracılığıyla yapılandırılabilir.

Info.plist'inize aşağıdakileri eklemek ATS'yi devre dışı bırakır:

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

1
NSAllowsArbitraryLoads yanlış olmalı, doğruysa tüm güvenli olmayan bağlantılara izin verir
Thiago Arreguy

plist ekleyerek bir web hizmeti dışında bir web hizmeti iyi çalışıyor bir web hizmeti iOS 9'da dahili sunucu hatası (500) döndürüyor ancak iOS8 veya sonraki sürümlerde iyi çalışıyor
amit gupta

1
Mağazada kabul edildi mi?
Vrashabh Irde

Çok kötü tavsiye; bkz. Dünyadaki en tehlikeli kod: tarayıcı dışı yazılımlarda SSL sertifikalarını doğrulama . Bir şeyler yapmak için önerilen yollarla dolu olup olmadığı sorusu göz önüne alındığında, bunun gibi "ben de" yanıtlarına gerek yoktur.
jww

15

Geliştirme Örneği

ATS'yi sağlam (= güvenli) tutan ancak yerel ana bilgisayarlara HTTPS yerine HTTP üzerinden bağlantı yapılmasına izin veren bir plistin ekran görüntüsü . Xcode 7.1.1'de çalışır.

Resim açıklamasını buraya girin


Varsayılan NSExceptionAllowsInsecureHTTPLoads - YESyapılandırmayı kullanmak zorunda kalmamak için localhost'u reaksiyona özgü olarak güvenli hale getirmenin, yani HTTPS'yi kullanmanın herhangi bir yolu var mı?
milkersarac

13

Bilgi.plistinize gidin

  1. Boş alana sağ tıklayın ve Satır Ekle'ye tıklayın
  2. Anahtar Adını altına NSAppTransportSecurity olarak yazın
  3. İstisna Etki Alanları'nı seçin, Buna yeni bir öğe ekleyin
  4. Erişilmesi gereken alan adınızı yazın
  5. Etki Alanı türünü Dize'den Sözlüğe değiştirin, yeni bir Öğe ekleyin
  6. NSTemporaryExceptionAllowsInsecureHTTPLoads, bu gerçek bir değere sahip bir boole olacaktır. Doğru takip etmek için resme bakın

1
Neden olarak NSAllowsArbitraryLoadsayarlandı true? ATS'nin amacını bozuyorsunuz. Ayrıca bkz. Dünyadaki en tehlikeli kod: tarayıcı dışı yazılımlarda SSL sertifikalarını doğrulama . Yazılımınız listeyi yeni oluşturdu.
jww

13

Apple'a göre, ATS'yi devre dışı bırakmak, bunu yapmak için iyi bir nedeniniz yoksa uygulama reddine yol açacaktır. O zaman bile, güvenli bir şekilde erişebileceğiniz alanlar için istisnalar eklemelisiniz.

Apple, tam olarak hangi ayarların kullanılacağını söyleyen mükemmel bir araca sahiptir: Terminal'de

/usr/bin/nscurl --ats-diagnostics --verbose https://www.example.com/whatever

ve nscurl bu isteğin başarısız olup olmadığını kontrol eder ve sonra çeşitli ayarları dener ve tam olarak hangisinin geçtiğini ve ne yapılacağını söyler. Örneğin, ziyaret ettiğim bazı üçüncü taraf URL'leri için bu komut bana bu sözlüğün geçtiğini söyledi:

{
    NSExceptionDomains = {
        "www.example.com" = {
            NSExceptionRequiresForwardSecrecy = false;
        };
    };
}

Kendi siteleriniz ile kontrolünüz dışındaki üçüncü taraf siteler arasında ayrım yapmak için, örneğin NSThirdPartyExceptionRequiresForwardSecrecy anahtarını kullanın.


1
Uygulama ile test etmeden önce kontrol etmek için harika bir araçtır. Zamandan tasarruf. ancak bu komutun çıkışını anlamak için okunacak herhangi bir kaynak.
damithH

1
İlginç bir araç. Benim durumumda bir şeyleri abartıyor. Üç anahtar da dahil olmak üzere listelenir NSExceptionAllowsInsecureHTTPLoads = true;, ancak birinin gerekli olmadığı ortaya çıkar.
Chris Prince

11

Belirtildiği gibi, otomatik olarak gerçekleştirilebilir kullanıma ne ayarları bulmaktan bu Teknik :

/usr/bin/nscurl --ats-diagnostics --verbose https://your-domain.com

Görünüşe göre bunun için OS X 10.11'e (El Capitan) ihtiyacınız var.
ecotax

10

NOT: Plist'inizdeki istisna etki alanı LOWER-CASE olmalıdır.

Örnek: Makinenizi Ayarlar-> Paylaşım altında "MyAwesomeMacbook" olarak adlandırdınız; sunucunuz (test amaçlı olarak) MyAwesomeMacbook.local: 3000 üzerinde çalışıyor ve uygulamanızın http: //MyAwesomeMacbook.local: 3000 / files ... adresine bir istek göndermesi gerekiyor, plistiniz "myawesomemacbook'u belirtmeniz gerekecek. yerel "olarak adlandırılır.

-

İnfo.plist'iniz ...

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>myawesomemacbook.local</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSExceptionAllowsInsecureHTTPLoads</key>
      <true/>
    </dict>
  </dict>
</dict>

9

kullanın:

Daha iyi anlamak için PList Ekran Görüntüsü

Sözlük türüne sahip plist dosyasına NSAppTransportSecurity adlı yeni bir öğe ekleyin, ardından Boolean türündeki sözlüğe NSAllowsArbitraryLoads alt öğesini ekleyin ve bool değeri YES değerini ayarlayın . Bu benim için çalışıyor.


1
NSAllowsArbitraryLoads yanlış olmalı, doğruysa tüm güvenli olmayan bağlantılara izin verir
Thiago Arreguy

plist ekleyerek bir web servisi dışında bir web hizmeti iyi çalışıyor bir web hizmeti iOS 9'da dahili sunucu hatası (500) döndürüyor ancak iOS8 veya sonraki sürümlerde iyi çalışıyor @ThiagoArreguy
amit gupta

Çok kötü tavsiye; bkz. Dünyadaki en tehlikeli kod: tarayıcı dışı yazılımlarda SSL sertifikalarını doğrulama . Bir şeyler yapmak için önerilen yollarla dolu olup olmadığı sorusu göz önüne alındığında, bunun gibi "ben de" yanıtlarına gerek yoktur.
jww

Kötü bir tavsiye biliyorum, ama sadece geliştirme modunda olmak için sadece bir çözüm. Apple bize esneklik sağladı, eğer bu kadar kötü olursa, buna izin vermezlerdi.
Tejinder

9

2015-09-25 tarihinde (2015-09-18'deki Xcode güncellemelerinden sonra):

Tembel olmayan bir yöntem kullandım, ancak işe yaramadı. Aşağıdakiler benim denemelerim.

İlk,

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.xxx.yyy.zzz</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

Ve ikinci,

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.xxx.yyy.zzz</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

Son olarak, tembel yöntemi kullandım:

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

Biraz güvensiz olabilir ama başka çözümler bulamadım.


Neden olarak NSAllowsArbitraryLoadsayarlandı true? ATS'nin amacını bozuyorsunuz. Ayrıca bkz. Dünyadaki en tehlikeli kod: tarayıcı dışı yazılımlarda SSL sertifikalarını doğrulama . Yazılımınız listeyi yeni oluşturdu.
jww

9

Hızlı 4 ve xocde 10, NSAllowsArbitraryLoads öğesini Rasgele Yüklere İzin Verecek şekilde değiştirir. yani şöyle görünecek:

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

6

Nasıl gidilir?

Info.plist, Main.storyboard veya viewController.swift öğelerinin altındaki dosyalardan biridir.

İlk kez tıkladığınızda, genellikle bir tablo biçimindedir, bu nedenle dosyayı sağ tıklatın ve 'Kaynak kodu olarak aç' ve ardından aşağıdaki kodu sonuna kadar ekleyin, yani:

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

Kodu hemen üstüne yapıştırın

 "</dict>
</plist>"

ki sonunda.


Neden olarak NSAllowsArbitraryLoadsayarlandı true? ATS'nin amacını bozuyorsunuz. Ayrıca bkz. Dünyadaki en tehlikeli kod: tarayıcı dışı yazılımlarda SSL sertifikalarını doğrulama . Yazılımınız listeyi yeni oluşturdu.
jww

5

Xcode 7.1 güncelleştirmesi, sorunla karşı karşıya 27.10.15:

Info.plist'deki yeni değer "Uygulama Aktarımı Güvenlik Ayarları" dır. Oradan bu sözlük şunları içermelidir:

  • Rasgele Yüklere İzin Ver = EVET
  • İstisna Alanlar (http alanınızı buraya ekleyin)

4

Buraya gelenler için WKWebView'larının neden her zaman beyaz ve hiçbir şey yüklemediğini bulmaya çalışıyorlar (tam olarak burada açıklandığı gibi WKWebView'ün hızlı ve bir macOS uygulaması için nasıl çalışacağını ):

Yukarıdaki tüm roket bilimleri sizin için işe yaramazsa, açık olanı kontrol edin: korumalı alan ayarları

korumalı alan ayarları]

Hızlı ve kakao konusunda yeni olmakla birlikte programlama konusunda oldukça deneyimliyim. Bu çözümü bulmak için yaklaşık 20 saat harcadım. Düzinelerce yenilikçi-iOS-öğreticisinden veya elma anahtar notlarından hiçbiri - hiçbir şey bu küçük onay kutusundan bahsetmiyor.


Aman tanrım, çok teşekkür ederim! Bana aynı 20 saatlik aramayı kaydettin!
Brecht Machiels

2
hedefin Yetenekler bölümünde bu bölümü görmüyor (Xcode 9.4.1)
shim

3

Varsayılan olarak iOS yalnızca HTTPS API'sine izin verir. HTTP güvenli olmadığından, Uygulama aktarım güvenliğini devre dışı bırakmanız gerekir. ATS'yi devre dışı bırakmanın iki yolu vardır: -

1. Proje info.plist'e kaynak kodu ekleme ve kök etikete aşağıdaki kodu ekleme.

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

2. Proje bilgisini kullanma.

Sol bölmedeki projeye tıklayın, projeyi hedef olarak seçin ve bilgi sekmesini seçin. Sözlüğü aşağıdaki yapıya eklemelisiniz.

resim açıklamasını buraya girin



1

Kullanılması NSExceptionDomains, hedef sitenin jsharici alanlardan kaynak (ör. Dosyalar) yükleyebilmesi nedeniyle eşzamanlı olarak bir efekt uygulanmayabilir http. Bu harici alan adları da eklenerek çözülebilir NSExceptionDomains.

Hangi kaynakların yüklenemediğini kontrol etmek için Uzaktan hata ayıklamayı kullanmayı deneyin. İşte bir öğretici: http://geeklearning.io/apache-cordova-and-remote-debugging-on-ios/


0

Cordova için ios.json'unuza eklemek istiyorsanız aşağıdakileri yapın:

"NSAppTransportSecurity": [
   {
      "xml": "<dict><key>NSAllowsArbitraryLoads</key><true /></dict>"
   }
]

Ve içinde olmalı:

"*-Info.plist": {
   "parents": {
   }
}

Config.xml dosyasındaki <access origin = "*" /> işe yaramadı. Her ikisinin de gerekli olduğundan emin değilim, ancak ios.json çözümü anlaşmayı benim için mühürledi.
zeusstl

Neden olarak NSAllowsArbitraryLoadsayarlandı true? ATS'nin amacını bozuyorsunuz. Ayrıca bkz. Dünyadaki en tehlikeli kod: tarayıcı dışı yazılımlarda SSL sertifikalarını doğrulama . Yazılımınız listeyi yeni oluşturdu.
jww

-1

Birçok kişinin belirttiği gibi, bu iOS 9.0 ile gelen bir özellik sorunudur. App Transport Security adlı bir şey eklediler ve Uygulamalarımı kırdığında da rahatsız oldum.

NSAllowsArbitraryLoads anahtarıyla .plist dosyanızdaki NSAppTransportSecurity sözlüğü altında YES olarak bandajlayabilirsiniz, ancak sonuçta HTTPS: // önekini oluşturmak için URL'lerinizi oluşturan kodu yeniden yazmanız gerekir.

Apple, iOS 9.0'da NSUrlConnection sınıfını yeniden yazdı. Bunu NSURLConnection'da okuyabilirsiniz .

Aksi takdirde, doğru çözümü uygulamak için zamanınız olana kadar iOS 9.0'dan çıkmanız gerekebilir.

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.