Jak mogę dodać NSAppTransportSecurity do mojego pliku info.plist?

124

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

Nie mogę dodać tego do mojej listy info.plist. Nie ma wartości. Używam XCode w wersji 7.0 beta (7A121l) i testuję na iOS9.

Ponieważ nie mogę dokładnie zadeklarować, jakiego adresu URL chcę, jak widać na filmie, ciągle otrzymuję komunikat „Usługa App Transport Security zablokowała ładowanie zasobu HTTP (http: //) w postaci zwykłego tekstu, ponieważ jest niezabezpieczona. Tymczasowe wyjątki można skonfigurować za pośrednictwem Plik Info.plist ”błędy.

Jednak wydaje mi się, że nie jestem w stanie go skonfigurować. Jakieś pomysły?

chris P
źródło
Tak naprawdę nie masz już pytania, powinieneś po prostu odpowiedzieć na swoje własne pytanie, a następnie zaakceptować po odpowiednim czasie.
Norman H
Jaka jest nazwa domeny ? czy to jest adres URL serwera, czy jakikolwiek inny? i gdzie znaleźć nazwę domeny mojej aplikacji?
Nik,
Nazwa domeny jest jednym z najczęściej używanych terminów. Cóż, to jest taki, który jest kupiony, a po hostingu możesz go użyć jako podstawowego adresu URL serwera, którego używasz dla API. Nie ma to jak nazwa domeny aplikacji. Możesz więc użyć nazwy domeny jako tej, w której zapisane są API.
Ashish

Odpowiedzi:

132

spróbuj Z tym --- pracował dla mnie w Xcode-beta 4 7.0

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

Jeszcze jedna opcja, jeśli chcesz wyłączyć ATS, możesz użyć tego:

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

Ale to wcale nie jest zalecane. Serwer powinien mieć certyfikaty SSL, aby nie dochodziło do wycieków prywatności.

Ashish
źródło
Mam XCode 7.2 (7C68) i zmodyfikowałem (wyłączając całkowicie ATS) info.plist mojego projektu testowego. Ale to nie działa. Jakaś wskazówka?
Sanandrea
ogólnie to działa ... czy możesz wkleić tutaj swój kod, a wtedy zobaczymy
Ashish
A także jeśli masz dwa lub więcej domanis, musisz dodać. <key>NSAllowsArbitraryLoads</key> <true/><key>NSExceptionDomains</key> W przeciwnym razie dla mnie nie zadziałało to z jakiegoś powodu
P.Lorand
90

Musisz tylko dodać klucz NSAllowsArbitraryLoads do YES w słowniku NSAppTransportSecurity w pliku info.plist.

Na przykład,

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

wprowadź opis obrazu tutaj

Hiren Varu
źródło
1
To jest obejście. Prawdziwym problemem jest śmierć z odpowiedzią @ Ashish
judepereira
45

To nie działało dla mnie, ale to zadziałało:

<key>NSAppTransportSecurity</key>  
     <dict>  
          <key>NSAllowsArbitraryLoads</key><true/>  
     </dict>  
Konstabl
źródło
Myślę, że masz na myśli <true/>zamiast<YES/>
Clifton Labrum
1
Z punktu widzenia bezpieczeństwa jest to dokładnie sposób, w jaki NIE należy tego robić, ponieważ nikt nigdy nie przejrzy tej sekcji kodu i nie zaktualizuje go do odpowiednio określonych domen.
igraczech
1
To nie jest dobra praktyka. Powinniśmy raczej zezwolić na określone domeny.
Ashish
1
Dla innych nowicjuszy, takich jak ja: Upewnij się, że umieściłeś to we właściwej pozycji (na końcu, zamknięte przez istniejące </dict>i </plist>tagi:
Pwdr
21

Dla wyjaśnienia ... Zawsze należy używać protokołu httpS

Ale możesz to ominąć, dodając wyjątek:

wprowadź opis obrazu tutaj

Manuel Pardo
źródło
9

Xcode 8.2, iOS 10

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
Oleg Malovichko
źródło
4

Zaktualizuj odpowiedź (po wwdc 2016):

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

App Transport Security, czyli ATS, to funkcja wprowadzona przez firmę Apple w systemie iOS 9. Gdy ATS jest włączony, wymusza na aplikacji łączenie się z usługami sieciowymi za pośrednictwem połączenia HTTPS zamiast niezabezpieczonego protokołu HTTP.

Jednak programiści mogą nadal wyłączyć ATS i zezwolić swoim aplikacjom na wysyłanie danych przez połączenie HTTP, jak wspomniano w powyższych odpowiedziach. Pod koniec 2016 roku Apple wprowadzi ATS jako obowiązkowe dla wszystkich programistów, którzy chcą udostępniać swoje aplikacje w App Store. połączyć

Paraneetharan Saravanaperumal
źródło
po zakończeniu tego roku nowa aplikacja lub aplikacja aktualizująca bez użycia protokołu HTTPS zostanie odrzucona. co z istniejącą aplikacją z obejściem? (potrzebujemy aktualizacji siły?)
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>

Umożliwi to połączenie z .com .net .org

Subirdcom
źródło
Dziękuję za przykład pokazujący, jak dodać wiele domen.
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>
Santhosh Legent
źródło
1

Aby wyjaśnić nieco więcej na temat odpowiedzi ParaSara: Zabezpieczenia transportu aplikacji staną się obowiązkowe, a próba ich wyłączenia może spowodować odrzucenie aplikacji.

Jako programista możesz wyłączyć zabezpieczenia App Transport, jeśli Twój kod sieciowy z nimi nie współpracuje i chcesz kontynuować inne prace rozwojowe przed naprawieniem jakichkolwiek problemów. Powiedzmy, że w pięcioosobowym zespole cztery osoby mogą kontynuować pracę nad innymi rzeczami, podczas gdy jeden rozwiązuje wszystkie problemy. Możesz również wyłączyć zabezpieczenia App Transport jako narzędzie do debugowania, jeśli masz problemy z siecią i chcesz sprawdzić, czy są one spowodowane zabezpieczeniami App Transport. Jak tylko się zorientujesz, powinieneś natychmiast go ponownie włączyć.

Rozwiązanie, którego musisz użyć w przyszłości, to w ogóle nie używać protokołu HTTP, chyba że używasz serwera innej firmy, który nie obsługuje protokołu HTTPS. Jeśli Twój własny serwer nie obsługuje protokołu HTTPS, Apple będzie miał z tym problem. Nawet w przypadku serwerów firm trzecich nie założyłbym się, że Apple to akceptuje.

To samo dotyczy różnych kontroli bezpieczeństwa serwera. W pewnym momencie Apple zaakceptuje tylko uzasadnione wyjątki.

Ale przede wszystkim weź pod uwagę to: zagrażasz prywatności swoich klientów. To wielkie nie-nie w mojej książce. Nie rób tego. Napraw swój kod, nie pytaj o pozwolenie na uruchomienie niebezpiecznego kodu.

gnasher729
źródło
1

W wierszu poleceń powłoki Mac użyj następującego polecenia:

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

Polecenie doda wszystkie niezbędne wartości do pliku plist.

Avi Levin
źródło
1

XCODE 8, Swift 3: Musisz dodać wiersz: **

„Ustawienie zabezpieczeń transportu aplikacji”

** na info.plist informacje wewnętrzne Lista nieruchomości.

Robert Juamarcal
źródło
0

Xcode 9.2, Swift 4, to działa dla mnie.

<key>App Transport Security Settings</key>
<dict>
    <key>Allow Arbitrary Loads</key>
    <true/>
</dict>
Hungmi
źródło