iOS
App Transport Security (ATS)
Szukaj…
Parametry
Parametr | Detale |
---|---|
NSAppTransportSecurity | Skonfiguruj ATS |
NSAllowsArbitraryLoads | Ustaw na YES aby wyłączyć ATS wszędzie. W iOS 10 i nowszych oraz macOS 10.12 i nowszych wartość tego klucza jest ignorowana, jeśli którykolwiek z następujących kluczy znajduje się w pliku Info.plist aplikacji: NSAllowsArbitraryLoadsInMedia, NSAllowsArbitraryLoadsInWebContent, NSAllowsLocalNetworking |
NSAllowsArbitraryLoadsInMedia | Ustaw na YES aby wyłączyć ATS dla nośników ładowanych przy użyciu interfejsów API ze środowiska AV Foundation. (iOS 10+, macOS 10.12+) |
NSAllowsArbitraryLoadsInWebContent | Ustaw na YES aby wyłączyć ATS w widokach aplikacji ( WKWebView , UIWebView , WebView ) bez wpływu na połączenia NSURLSession. (iOS 10+, macOS 10.12+) |
NSAllowsLocalNetworking | Ustaw na YES aby wyłączyć połączenia z domenami niekwalifikowanymi i domenami lokalnymi. (iOS 10+, macOS 10.12+) |
NSExceptionDomains | Skonfiguruj wyjątki dla określonych domen |
NSIncludesSubdomains | Ustaw na YES aby zastosować wyjątki do wszystkich poddomen wybranej domeny. |
NSRequiresCertificateTransparency | Ustaw na YES aby wymagać przedstawienia ważnych, podpisanych znaczników czasowych przejrzystości certyfikatu (CT) ze znanych dzienników CT dla certyfikatów serwera (X.509) w domenie. (iOS 10+, macOS 10.12+) |
NSExceptionAllowsInsecureHTTPLoads | Ustaw na YES aby zezwolić na HTTP w wybranej domenie. |
NSExceptionRequiresForwardSecrecy | Domyślnie YES ; Ustaw na NO aby wyłączyć Forward Secrecy i zaakceptować więcej szyfrów. |
NSExceptionMinimumTLSVersion | Domyślnie TLSv1.2 ; Możliwe wartości to: TLSv1.0 , TLSv1.1 , TLSv1.2 |
NSThirdPartyExceptionAllowsInsecureHTTPLoads | Podobne do NSExceptionAllowsInsecureHTTPLoads , ale dla domen, nad którymi nie masz kontroli |
NSThirdPartyExceptionRequiresForwardSecrecy | Podobne do NSExceptionRequiresForwardSecrecy , ale dla domen, nad którymi nie masz kontroli |
NSThirdPartyExceptionMinimumTLSVersion | Podobne do NSExceptionMinimumTLSVersion , ale dla domen, nad którymi nie masz kontroli |
Uwagi
App Transport Security to funkcja bezpieczeństwa w iOS i macOS. Zapobiega nawiązywaniu przez aplikacje niezabezpieczonych połączeń. Domyślnie aplikacje mogą korzystać wyłącznie z bezpiecznych połączeń HTTPS.
Jeśli aplikacja musi połączyć się z serwerem za pośrednictwem protokołu HTTP, w Info.plist
należy zdefiniować wyjątki. (zobacz przykłady, aby uzyskać więcej informacji na ten temat)
Uwaga: w 2017 r. Apple będzie egzekwować ATS. Oznacza to, że nie można już przesyłać aplikacji, które mają wyjątki ATS zdefiniowane w Info.plist
. Jeśli potrafisz podać dobre argumenty, dlaczego musisz użyć HTTP, możesz skontaktować się z Apple, a one pozwolą ci zdefiniować wyjątki. (Źródło: WWDC 2016 - Sesja 706 )
Więcej informacji na temat konfiguracji App Transport Security można znaleźć w dokumentacji CocoaKeys .
Załaduj całą zawartość HTTP
Firma Apple wprowadziła ATS z iOS 9 jako nową funkcję bezpieczeństwa w celu poprawy prywatności i bezpieczeństwa między aplikacjami i usługami internetowymi. ATS domyślnie nie spełnia wszystkich żądań innych niż HTTPS. Chociaż może to być naprawdę miłe w środowiskach produkcyjnych, może być uciążliwe podczas testowania.
ATS jest skonfigurowany w pliku Info.plist
docelowego za pomocą słownika NSAppTransportSecurity
( App Transport Security Settings
w edytorze Xcode Info.plist). Aby zezwolić na całą zawartość HTTP, dodaj wartość logiczną Allow Arbitrary Loads
( NSAllowsArbitraryLoads
) i ustaw ją na YES
. Nie jest to zalecane w przypadku aplikacji produkcyjnych, a jeśli wymagana jest zawartość HTTP, zaleca się selektywne włączenie jej.
Selektywnie ładuj zawartość HTTP
Podobnie jak w przypadku włączania całej zawartości HTTP, cała konfiguracja odbywa się w App Transport Security Settings
. Dodaj słownik Exception Domains
( NSExceptionDomains
) do ustawień najwyższego poziomu ATS.
Dla każdej domeny dodaj element słownika do domen wyjątków, gdzie kluczem jest dana domena. Ustaw NSExceptionAllowsInsecureHTTPLoads
na YES
aby wyłączyć wymaganie HTTPS dla tej domeny.
Punkty końcowe wymagają SSL
Wprowadzone w iOS 9 wszystkie punkty końcowe muszą być zgodne ze specyfikacją HTTPS.
Wszelkie punkty końcowe nieużywające protokołu SSL zakończą się niepowodzeniem z ostrzeżeniem w dzienniku konsoli. W Twojej aplikacji pojawi się komunikat, że połączenie internetowe nie powiodło się.
Aby skonfigurować wyjątki: Umieść następujące informacje w pliku Info.plist:
- Pozostawić szczególną domenę (testdomain.com) tylko:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>testdomain.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
Kluczem pozwalającym na takie zachowanie jest NSExceptionAllowsInsecureHTTPLoads
. W takim przypadku aplikacja zezwoli tylko na połączenie HTTP ze wspomnianą domeną (testdomain.com) i zablokuje wszystkie pozostałe połączenia HTTP.
Klucz NSIncludesSubdomains
określa, że wszystkie i wszystkie poddomeny wspomnianej domeny (testdomain.com) powinny być również dozwolone.
- Zezwalaj na dowolną domenę:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
W takim przypadku aplikacja pozwoli na połączenie HTTP z dowolną domeną. Od 1 stycznia 2017 r. Użycie tej flagi spowoduje dokładną ocenę App Store, a twórcy aplikacji będą musieli wyjaśnić, dlaczego przede wszystkim muszą korzystać z tego wyjątku. Możliwe wyjaśnienia obejmują:
- Aplikacja ładująca zaszyfrowane treści multimedialne, które nie zawierają spersonalizowanych informacji.
- Połączenia z urządzeniami, których nie można zaktualizować w celu korzystania z bezpiecznych połączeń.
- Połączenie z serwerem zarządzanym przez inny podmiot i nieobsługującym bezpiecznych połączeń.