Jakie ustawienia muszę wprowadzić, info.plist
aby włączyć tryb HTTP zgodnie z poniższym komunikatem o błędzie?
Bezpieczeństwo transportu zablokowało ładowanie zasobu HTTP w postaci jawnego tekstu (http: //), ponieważ jest ono niepewne. Tymczasowe wyjątki można skonfigurować za pomocą pliku Info.plist aplikacji.
Załóżmy, że moja domena to example.com
.
Allow arbitary loads
). Wkrótce nie będzie to możliwe, ponieważ Apple będzie wymagało ATS (pierwotnie koniec roku - termin został przedłużony) - developer.apple.com/news/?id=12212016bOdpowiedzi:
Jeśli używasz Xcode 8.0+ i Swift 2.2+ lub nawet Cel C:
źródło
NSAllowsArbitraryLoads
ustawiony natrue
? Obniżasz cel ATS. Zobacz także Najbardziej niebezpieczny kod na świecie: sprawdzanie poprawności certyfikatów SSL w oprogramowaniu innym niż przeglądarka . Twoje oprogramowanie właśnie znalazło się na liście.Użyj NSAppTransportSecurity:
Trzeba ustawić NSAllowsArbitraryLoads klucz TAK pod NSAppTransportSecurity słownika w pliku Info.plist.
źródło
Oto ustawienia wizualnie:
źródło
Zobacz post na forum Bezpieczeństwo transportu aplikacji? .
Również strona Konfigurowanie wyjątków bezpieczeństwa transportu aplikacji w iOS 9 i OSX 10.11 .
Na przykład możesz dodać określoną domenę, taką jak:
Leniwa opcja to:
Uwaga:
info.plist
jest plikiem XML, więc możesz umieścić ten kod mniej więcej w dowolnym miejscu w pliku.źródło
Zostało to przetestowane i działało na ziarnie iOS 9 GM - jest to konfiguracja umożliwiająca określonej domenie używanie HTTP zamiast HTTPS:
NSAllowsArbitraryLoads
musi byćfalse
, ponieważ uniemożliwia wszelkie niebezpieczne połączenia, ale lista wyjątków umożliwia połączenie z niektórymi domenami bez HTTPS.źródło
Jest to szybkie obejście (ale nie zalecane), aby dodać to do listy:
Co oznacza (zgodnie z dokumentacją Apple ):
Naprawdę polecam linki:
które pomagają mi zrozumieć przyczyny i wszystkie implikacje.
Poniższy plik XML (w pliku Info.plist):
nie zezwalaj na arbitralne połączenia dla wszystkich stron, ale dla
PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE
zezwoli na to, aby połączenia korzystały z protokołu HTTP.Do powyższego kodu XML możesz dodać:
jeśli chcesz zezwolić na niebezpieczne połączenia z poddomenami podanego adresu.
Najlepszym rozwiązaniem jest zablokowanie wszystkich dowolnych ładowań (ustawionych na wartość false) i dodanie wyjątków, aby zezwolić tylko na adresy, o których wiemy, że są w porządku.
Dla zainteresowanych czytelników
Aktualizacja 2018:
Apple nie zaleca wyłączania tego - więcej informacji można znaleźć w 207 sesji WWDC 2018 z dodatkowymi wyjaśnieniami dotyczącymi bezpieczeństwa
Pozostawiając oryginalną odpowiedź ze względów historycznych i fazy rozwoju
źródło
NSAllowsArbitraryLoads
musi byćfalse
<key>NSIncludesSubdomains</key> <true/>
? Czy każde otoczenie musi być otoczone<dict>
? jak edytujesz ten cholerny plik plist? Jakie jest formatowanie? : D Dziękuję.Dla tych z Was, którzy chcą więcej informacji na temat tego, dlaczego tak się dzieje, oprócz tego, jak to naprawić, przeczytaj poniżej.
Wraz z wprowadzeniem systemu iOS 9, aby poprawić bezpieczeństwo połączeń między aplikacją a usługami internetowymi, bezpieczne połączenia między aplikacją a usługą internetową muszą być zgodne z najlepszymi praktykami . Zachowanie najlepszych praktyk jest egzekwowane przez App Transport Security w celu:
Jak wyjaśniono w notatce technicznej App Transport Security , podczas komunikacji z usługą internetową App Transport Security ma teraz następujące wymagania i zachowanie:
Innymi słowy, twoje żądanie usługi internetowej powinno: a.) Używać HTTPS i b.) Być szyfrowane przy użyciu TLS v1.2 z zachowaniem tajemnicy przekazywania.
Jednak, jak wspomniano w innych postach, możesz zastąpić to nowe zachowanie z App Transport Security, określając niepewną domenę w
Info.plist
swojej aplikacji.Aby zastąpić, musisz dodać
NSAppTransportSecurity
>NSExceptionDomains
właściwości słownika do swojegoInfo.plist
. Następnie dodasz domenę usługi internetowej doNSExceptionDomains
słownika.Na przykład, jeśli chcę ominąć zachowanie App Transport Security dla usługi internetowej na hoście www.twojawebservicehost.com, to zrobiłbym następujące:
Otwórz aplikację w Xcode.
Znajdź
Info.plist
plik w Nawigatorze projektu i kliknij go prawym przyciskiem myszy i wybierz opcję menu Otwórz jako > Kod źródłowy . Plik listy właściwości pojawi się w prawym okienku.Umieść następujący blok właściwości w głównym słowniku właściwości (pod pierwszym
<dict>
).Jeśli musisz podać wyjątki dla dodatkowych domen, możesz dodać inną właściwość słownika poniżej
NSExceptionDomains
.Aby dowiedzieć się więcej na temat wyżej wymienionych kluczy, przeczytaj wspomnianą już notę techniczną .
źródło
./platforms/ios/<project>/<project>-Info.plist
zNSAllowsArbitraryLoads=false
wieloma domenami wyjątków dla usług o różnych kombinacjach TLS / HTTP / HTTPS. Początkowo używany,NSAllowsArbitraryLoads=true
a następnie dostosowywany, rozwiązywanie problemów z regułami metodą prób i błędów w celu zapewnienia zgodności z wytycznymi i przedstawienia do zatwierdzenia. Uwaga:config.xml
<access origin=.../>
instrukcje częściowo wypełniają ten plik, ale obecnie wymagają korekty poprzez bezpośrednią edycję lub za pomocą XCode, aby uzyskać poprawność szczegółów.<access origin="*"/>
(w config.xml) zestawyNSAllowsArbitraryLoads=true
(dla aplikacji Cordova / Phonegap / hybridNSExceptionAllowsInsecureHTTPLoads
ustawiony natrue
? Obniżasz cel ATS. Zobacz także Najbardziej niebezpieczny kod na świecie: sprawdzanie poprawności certyfikatów SSL w oprogramowaniu innym niż przeglądarka . Twoje oprogramowanie właśnie znalazło się na liście.Nie lubię bezpośrednio edytować listy. Możesz łatwo dodać go do listy za pomocą GUI:
Teraz zmień dane w głównym obszarze:
Add Row
źródło
NSAllowsArbitraryLoads
ustawiony naYES
? Obniżasz cel ATS. Zobacz także Najbardziej niebezpieczny kod na świecie: sprawdzanie poprawności certyfikatów SSL w oprogramowaniu innym niż przeglądarka . Twoje oprogramowanie właśnie znalazło się na liście.Istnieją na to dwa rozwiązania:
Rozwiązania 1:
Info.plist
pliku dodaj słownik z kluczem 'NSAppTransportSecurity
''Allow Arbitrary Loads'
Plist
struktura powinna wyglądać jak pokazano na poniższym obrazku.Rozwiązanie 2:
Info.plist
pliku dodaj słownik z kluczem 'NSAppTransportSecurity
'NSExceptionDomains
''MyDomainName.com'
typu NSDictionaryNSIncludesSubdomains
” typuBoolean
i wartości ustawionym jakoYES
NSTemporaryExceptionAllowsInsecureHTTPLoads
” typuBoolean
i wartości ustawionym jakoYES
Plist
struktura powinna wyglądać jak pokazano na poniższym obrazku.Preferowane jest rozwiązanie 2, ponieważ pozwala ono tylko na wybraną domenę, podczas gdy rozwiązanie 1 pozwala na wszystkie niepewne połączenia HTTP.
źródło
NSAllowsArbitraryLoads
ustawiony naYES
? Obniżasz cel ATS. Zobacz także Najbardziej niebezpieczny kod na świecie: sprawdzanie poprawności certyfikatów SSL w oprogramowaniu innym niż przeglądarka . Twoje oprogramowanie właśnie znalazło się na liście.Zabezpieczenia transportu są dostępne w systemie iOS 9.0 lub nowszym. Możesz mieć to ostrzeżenie, gdy próbujesz wywołać WS w swojej aplikacji:
Dodanie następujących informacji do Info.plist wyłączy ATS:
źródło
Przykład rozwoju
Oto zrzut ekranu plista, który utrzymuje ATS w stanie nienaruszonym (= bezpieczny), ale pozwala na nawiązywanie połączeń z hostem lokalnym przez HTTP zamiast HTTPS . Działa w Xcode 7.1.1.
źródło
NSExceptionAllowsInsecureHTTPLoads - YES
konfiguracji?Przejdź do swojej Info.plist
źródło
NSAllowsArbitraryLoads
ustawiony natrue
? Obniżasz cel ATS. Zobacz także Najbardziej niebezpieczny kod na świecie: sprawdzanie poprawności certyfikatów SSL w oprogramowaniu innym niż przeglądarka . Twoje oprogramowanie właśnie znalazło się na liście.Według Apple, wyłączenie ATS spowoduje odrzucenie aplikacji, chyba że masz ku temu dobry powód. Nawet wtedy należy dodać wyjątki dla domen, do których można bezpiecznie uzyskać dostęp.
Apple ma doskonałe narzędzie, które mówi dokładnie, jakich ustawień użyć: W Terminalu wpisz
a nscurl sprawdzi, czy to żądanie się nie powiedzie, a następnie wypróbuje różne ustawienia i powie dokładnie, które z nich przechodzi i co zrobić. Na przykład dla niektórych adresów URL stron trzecich, które odwiedzam, to polecenie powiedziało mi, że ten słownik przechodzi:
Aby rozróżnić między własnymi witrynami a witrynami stron trzecich, które są poza Twoją kontrolą, użyj na przykład klucza NSThirdPartyExceptionRequiresForwardSecrecy.
źródło
NSExceptionAllowsInsecureHTTPLoads = true;
, ale okazuje się, że jeden nie jest potrzebny.Ustalenie, jakich ustawień można użyć automatycznie, jak wspomniano w tej notce technicznej :
źródło
UWAGA: Domena wyjątków na liście musi znajdować się w DOLNEJ PRZYPADKU.
Przykład: nazwałeś swój komputer „MyAwesomeMacbook” w Ustawieniach-> Udostępnianie; Twój serwer (do celów testowych) działa na MyAwesomeMacbook.local: 3000, a twoja aplikacja musi wysłać żądanie na http: //MyAwesomeMacbook.local: 3000 / pliki ..., twój list będzie musiał określić „myawesomemacbook. lokalny ”jako domena wyjątku.
-
Twój info.plist zawierałby ...
źródło
Posługiwać się:
Dodaj nowy element, NSAppTransportSecurity , w pliku plist z typem Dictionary , a następnie dodaj element podrzędny NSAllowsArbitraryLoads w słowniku typu Boolean i ustaw wartość bool na TAK . To działa dla mnie.
źródło
25.09.2015 (po aktualizacji Xcode 18.09.2015):
Użyłem nie leniwej metody, ale to nie zadziałało. Oto moje próby.
Pierwszy,
I drugi,
Wreszcie użyłem leniwej metody:
Może to być trochę niepewne, ale nie mogłem znaleźć innych rozwiązań.
źródło
NSAllowsArbitraryLoads
ustawiony natrue
? Obniżasz cel ATS. Zobacz także Najbardziej niebezpieczny kod na świecie: sprawdzanie poprawności certyfikatów SSL w oprogramowaniu innym niż przeglądarka . Twoje oprogramowanie właśnie znalazło się na liście.W swift 4 i xocde 10 jest zmiana NSAllowsArbitraryLoads na Allow Arbitrary Load. będzie to wyglądać tak:
źródło
Warto wspomnieć, jak się tam dostać ...
Info.plist to jeden z plików poniżej Main.storyboard lub viewController.swift.
Kiedy klikniesz go po raz pierwszy, zwykle ma on format tabeli, więc kliknij plik prawym przyciskiem myszy i „otwórz jako” kod źródłowy, a następnie dodaj kod pod koniec, tj .:
Skopiuj wklej kod powyżej
który jest na końcu.
źródło
NSAllowsArbitraryLoads
ustawiony natrue
? Obniżasz cel ATS. Zobacz także Najbardziej niebezpieczny kod na świecie: sprawdzanie poprawności certyfikatów SSL w oprogramowaniu innym niż przeglądarka . Twoje oprogramowanie właśnie znalazło się na liście.Aktualizacja Xcode 7.1, problem 27.10.15:
Nowa wartość w Info.plist to „Ustawienia zabezpieczeń transportu aplikacji”. Stamtąd ten słownik powinien zawierać:
źródło
Dla tych, którzy tu przybyli, próbując znaleźć powód, dla którego ich WKWebView jest zawsze biały i nic nie ładuje (dokładnie tak, jak opisano tutaj, jak sprawić, aby WKWebView działał szybko i dla aplikacji macOS ):
Jeśli powyższe informacje dotyczące rakiet nie działają, sprawdź oczywiste: ustawienia piaskownicy
Będąc nowym w swift i kakao, ale z dużym doświadczeniem w programowaniu, spędziłem około 20 godzin na znalezieniu tego rozwiązania. Żaden tuzin samouczków hipster-iOS ani Apple Keynotes - nic nie wspomina o tym małym polu wyboru.
źródło
Domyślnie iOS pozwala tylko na HTTPS API. Ponieważ HTTP nie jest bezpieczny, musisz wyłączyć zabezpieczenia transportu aplikacji. Istnieją dwa sposoby wyłączenia ATS: -
Kliknij projekt w lewym okienku, wybierz projekt jako cel i wybierz kartę informacyjną. Musisz dodać słownik w następującej strukturze.
źródło
źródło
Używanie
NSExceptionDomains
może nie przynosić efektu jednocześnie, ponieważ witryna docelowa może ładować zasoby (np.js
Pliki) z domen zewnętrznychhttp
. Można to rozwiązać, dodając również te domeny zewnętrzneNSExceptionDomains
.Aby sprawdzić, które zasoby nie mogą zostać załadowane, spróbuj użyć zdalnego debugowania. Oto samouczek: http://geeklearning.io/apache-cordova-and-remote-debugging-on-ios/
źródło
W przypadku Cordova, jeśli chcesz dodać go do pliku ios.json, wykonaj następujące czynności:
I powinno znajdować się w:
źródło
NSAllowsArbitraryLoads
ustawiony natrue
? Obniżasz cel ATS. Zobacz także Najbardziej niebezpieczny kod na świecie: sprawdzanie poprawności certyfikatów SSL w oprogramowaniu innym niż przeglądarka . Twoje oprogramowanie właśnie znalazło się na liście.Jak wielu zauważyło, jest to problem związany z funkcją iOS 9.0. Dodali coś o nazwie App Transport Security, a ja również byłem zirytowany, gdy zepsuło to moje aplikacje.
Możesz bandażować go za pomocą klucza NSAllowsArbitraryLoads na TAK w słowniku NSAppTransportSecurity w pliku .plist, ale ostatecznie będziesz musiał ponownie napisać kod tworzący adresy URL, aby utworzyć prefiks HTTPS: //.
Apple przepisało klasę NSUrlConnection w iOS 9.0. Możesz o tym przeczytać w NSURLConnection .
W przeciwnym razie może być konieczne wycofanie się z iOS 9.0, dopóki nie będziesz mieć czasu na wdrożenie właściwego rozwiązania.
źródło