Як додати NSAppTransportSecurity до файлу info.plist?


124

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

Я, здається, не можу додати це до свого списку info.plist. Немає значення. Я запускаю бета-версію XCode версії 7.0 (7A121l) і тестую на iOS9.

Оскільки я не можу конкретно оголосити, яку URL-адресу я хочу, як це бачиться на відео, я продовжую отримувати "Захист транспорту додатків заблокував завантаження ресурсів HTTP (http: //) з ясним текстом, оскільки він не є безпечним. Тимчасові винятки можна налаштувати за допомогою програми Помилки файлу "Info.plist".

Однак я, здається, не в змозі налаштувати це. Будь-які ідеї?


У вас насправді більше не виникає питання, вам слід просто продовжити відповідь на власне питання, а потім прийняти через відповідний час затримки.
Норман Н

що таке доменне ім’я? це URL-адреса бази сервера чи будь-яка інша? і де знайти своє доменне ім’я програми?
Нік

Доменне ім'я - один з найпоширеніших термінів, що використовуються. Ну, це той, що купується, а потім після хостингу ви можете використовувати його як URL-адресу бази сервера, яку ви використовуєте для API. Не існує нічого подібного доменного імені програми. Таким чином, ви можете використовувати доменне ім'я як те, де написано API.
Ашиш

Відповіді:


131

спробуйте --- працював для мене в 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>

Також ще один варіант, якщо ви хочете відключити АТС, ви можете скористатися цим:

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

Але це зовсім не рекомендується. Сервер повинен мати сертифікати SSL, щоб не було витоків конфіденційності.


У мене XCode 7.2 (7C68) і я змінив (повністю відключивши ATS) info.plist мого тестового проекту. Але це не працює. Якась підказка?
Санандрея

як правило, це працює ... чи можете ви вставити тут ур-код, а потім ми можемо побачити
Ashish

А також якщо у вас є два або більше domanis, ви повинні додати, <key>NSAllowsArbitraryLoads</key> <true/><key>NSExceptionDomains</key> інакше для мене це не спрацювало з версією випуску чомусь
P.Lorand

90

Ви повинні додати лише ключ NSAllowsArbitraryLoads до ТАК у словнику NSAppTransportSecurity у вашому файлі info.plist.

Наприклад,

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

введіть тут опис зображення


1
Це вирішення. Справжнє питання - смерть у відповіді @ Ashish
judepereira

45

Це не працювало для мене, але це зробило трюк:

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

Я думаю, ви маєте на увазі <true/>замість<YES/>
Кліфтон Лабрум

1
З точки зору безпеки, це саме такий спосіб, як НЕ робити це, оскільки ніхто ніколи не перегляне цей розділ коду та не оновить його до правильно вказаних доменів.
igraczech

1
Це не є хорошою практикою. Швидше ми повинні дозволити конкретні домени.
Ашиш

1
Для інших новачків, як я: Не забудьте поставити це в правильному положенні (наприкінці, додається до наявних </dict>і </plist>тегів:
Pwdr

21

Просто для уточнення ... Ви завжди повинні використовувати httpS

Але ви можете обійти його, додавши виняток:

введіть тут опис зображення



4

Оновити відповідь (після wwdc 2016):

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

Безпека транспорту додатків або ATS - це функція, яку Apple представила в iOS 9. Коли функція ATS включена, вона змушує додаток підключатися до веб-служб через HTTPS-з'єднання, а не незахищений HTTP.

Однак розробники можуть все-таки вимкнути ATS і дозволити їх програмам надсилати дані через HTTP-з'єднання, як зазначено вище у відповідях. Наприкінці 2016 року Apple зробить ATS обов'язковим для всіх розробників, які сподіваються подати свої додатки в App Store. посилання


після закінчення цього року нову програму чи оновлення без використання https буде відхилено. що з наявним додатком із байпасом? (нам потрібне оновлення сили?)
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>

Це дозволить підключитися до .com .net .org


Дякуємо за приклад, який показує, як додати кілька доменів.
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

Для того, щоб пояснити трохи більше про відповідь Парашара: безпека App Transport буде ставати обов'язкової і намагаємося перетворити його може отримати ваш додаток відкидається.

Як розробник, ви можете вимкнути безпеку App Transport, якщо ваш мережевий код не працює з ним, і ви хочете продовжити іншу розробку, перш ніж виправити будь-які проблеми. Скажімо, у команді з п'яти, чотирьох можна продовжувати працювати над іншими речами, тоді як одна виправляє всі проблеми. Ви також можете вимкнути безпеку транспорту App як інструмент налагодження, якщо у вас є проблеми з мережею, і ви хочете перевірити, чи викликані вони безпекою транспорту додатків. Як тільки ви дізнаєтесь, вам слід негайно ввімкнути його знову.

Рішення, яке ви повинні використовувати в майбутньому, - це взагалі не використовувати http, якщо тільки ви не використовуєте сторонній сервер, який не підтримує https. Якщо ваш власний сервер не підтримує https, у Apple виникне проблема з цим. Навіть із сторонніми серверами, я б не став би на те, що Apple це приймає.

Те саме з різними чеками на безпеку сервера. У якийсь момент Apple прийме лише виправдані винятки.

Але в основному врахуйте це: Ви загрожуєте конфіденційності своїх клієнтів. Це велика ні-ні в моїй книзі. Не робіть цього. Виправте свій код, не вимагайте дозволу на запуск небезпечного коду.



1

У командному рядку оболонки mac використовуйте таку команду:

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

Команда додасть усі необхідні значення у ваш список плістів.


1

XCODE 8, Swift 3: Вам потрібно додати рядок: **

"Налаштування безпеки транспорту додатків"

** у інформаційному списку всередині інформації Перелік властивостей.


0

Xcode 9.2, Swift 4, це працює для мене.

<key>App Transport Security Settings</key>
<dict>
    <key>Allow Arbitrary Loads</key>
    <true/>
</dict>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.