Безпека транспорту заблокувала HTTP з ясним текстом


1451

Які налаштування потрібно встановити info.plistдля включення режиму HTTP відповідно до наступного повідомлення про помилку?

Безпека транспорту заблокувала завантаження ресурсів HTTP (http: //) з ясним текстом, оскільки це небезпечно. Тимчасові винятки можна налаштувати через файл Info.plist вашого додатка.

Xcode

Припустимо, що мій домен є example.com.



15
Примітка модератора : На це питання вже є 36 відповідей. Перш ніж додати ще одну , переконайтесь, що ваше рішення нове .
Метт

5
ПРИМІТКА: Рішення тут пропонують вимкнути ATS ( Allow arbitary loads). Незабаром це стане неможливим, оскільки Apple зажадає ATS (спочатку наприкінці року - термін продовжено) - developer.apple.com/news/?id=12212016b
Jakub Truhlář


@Jeef чому ви додали тег iOS 10? чи були в цьому питанні додаткові зміни в iOS 10? Я вважаю, що він був представлений в iOS9, і цей тег повинен бути достатнім з точки зору версій iOS
Julian Król

Відповіді:


469

Якщо ви використовуєте Xcode 8.0+ та Swift 2.2+ або навіть ціль C:

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

<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
Чому NSAllowsArbitraryLoadsвстановлено true? Ви підриваєте мету ОВС. Також див . Найнебезпечніший код у світі: перевірка SSL-сертифікатів у програмному забезпеченні, що не переглядає браузер . Ваше програмне забезпечення тільки що внесло список.
jww

6
@jww Це мета цієї публікації. Сайт, до якого потрібно підключитися для відтворення аудіо, ще не використовує HTTPS, і я не намагаюсь чекати.
ThinkDigital

5
Це не працюватиме в iOS 10.0+ або MacOS 10.12+. Насправді це дозволяє дозволити всі довільні навантаження, Окрім згаданих (example.com). Таким чином, це зробить зворотне значення того, що бажано. Тут слід встановити значення false для NSAllowsArbirtraryLoads. детальніше: Документи Apple
Freek Sanders

1
Погодьтеся, чому на землі все це закликають? Немає сенсу використовувати NSAllowsArbitraryLoads, якщо ви встановите домен виключення.
thibaut noah

1
NSAllowsArbitraryLoads не потребує істинності, тому його потрібно видалити. Досить NSExceptionDomains, який дозволяє незахищене підключення лише до цього домену. NSAllowsArbitraryLoads = true дозволить забезпечити незахищене підключення до будь-якого домену, тому, якщо все-таки встановити його на істинному, робить NSExceptionDomains дурницею, оскільки він включає всі домени вже
mister_giga

950

Використовуйте безпеку NSAppTransportSecurity:

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

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

Конфігурація списку


157
Нехай буде відомо: ЦЕ РОБОТА! Щоразу, коли ви користуєтеся HTTP через HTTPS, ви відкриваєте пристрої користувачів на вразливі місця. Звичайно, це малоймовірно у багатьох випадках, але етичне програмування - найкраща практика. Just sayin '... - також, +1 для робочих (для тестування)
Jacksonkr

36
Це НЕ рішення - це ХЕК! Для додавання окремих доменів «виключення» побачити цю відповідь нижче: stackoverflow.com/a/32560433/1103584
DiscDev

17
Хоча, як відомо, це рішення є вразливим, це єдине рішення, яке я рекомендував би під час РОЗВИТКУ . Доводиться вводити кожен конкретний домен під час розробки просто нерозумно (особливо якщо ви використовуєте сторонні веб-сервіси).
reTs

6
Назву цих клавіш тепер змінили "Налаштування безпеки транспортного забезпечення додатка" під "Дозволити довільні вантажі"
vishal dharankar

11
Чому так багато людей проти цього рішення? Це точно НЕ хак! Багато додатків потребують зв’язку з фактичним Інтернетом, де протокол безпеки не завжди знаходиться під вашим контролем. Наприклад, здається дуже розумним можливість показувати зображення з інших серверів, які не мають сертифікату SSL.
Орен

825

Ось налаштування візуально:

візуальні налаштування для NSAllowsArbitraryLoads у info.plist через Xcode GUI


10
У мене немає такого варіанту.
Користувач

25
Якщо ви відкриєте свій Info.plist безпосередньо, ви можете просто додати словник NSAppTransportSecurity , а потім створити елемент NSAllowsArbitraryLoads всередині цього (див. Відповідь, відредаговану Умаром Фаруком, нижче).
Стоф

3
Те саме тут - домени виключень не працювали для мене з 7.3.
RegularExpression

4
Ця опція не існує - XCode 7.3.1
jameshfisher

3
Інформація від @JoshPinter працювала для мене з XCode 8.
Matthew Bellantoni

717

Дивіться повідомлення на форумі Захист транспорту транспорту? .

Також сторінка Налаштування винятків безпеки транспорту додатків у iOS 9 та OSX 10.11 .

Наприклад, ви можете додати певний домен, наприклад:

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

Ледачий варіант:

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

Примітка:

info.plist це XML-файл, тому ви можете розмістити цей код більш-менш де-небудь у файлі.


1
Як це зробити, я маю на увазі, який спосіб додати цей код до Info.plist, оскільки я не знаю, куди вставити цей код?
lmiguelvargasf

2
@lmiguelvargasf відкрийте свій інформаційний список у текстовому редакторі
Dan Beaulieu

7
Я все ще отримую помилку: встановлений домен виключення, а NSAllowsArbitraryLoads - помилковий. Навіть якщо NSAllowsArbitraryLoads встановлено істину, виявляється помилка. Хтось ще тут має це питання?
klaevv

3
Станом на 30.01.2016 Apple doc показує, що в ключах більше немає тимчасового слова, наприклад: NSExceptionAllowsInsecureHTTPLoads NSExceptionMinimumTLSVersion Дивіться developer.apple.com/library/prerelease/ios/documentation/…
Філіп Моне

3
У разі, якщо хтось інший витягує волосся, тому що робити ці прості зміни в info.plist не виходить .. додайте зміни до Project> Target> Info> Спеціальні властивості для iOS Target
BlueGuy

330

Це було протестовано та працювало над насінням GM iOS 9 - така конфігурація дозволяє конкретному домену використовувати HTTP замість HTTPS:

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

NSAllowsArbitraryLoadsповинно бути false, тому що це відключає все небезпечне з'єднання, але список винятків дозволяє підключення до деяких доменів без HTTPS.


7
ЦЕ слід позначити як відповідь. Випробувано та працюю над насінням GM iOS 9, щоб дозволити конкретному домену використовувати http, не приймаючи "ледачий" спосіб та повністю відкривши додаток.
DiscDev

2
Як додати це до свого списку info.plist?
JMStudios.jrichardson

8
Гаразд, я додав цей запис до свого інформаційного списку, і я все ще отримую цю помилку - "Безпека транспорту додатків заблокувала завантаження ресурсів HTTP (http: //), оскільки це небезпечно. Тимчасові винятки можна налаштувати за допомогою інформації вашого додатка .plist файл. "
KMC

2
@RomanShapovalov, якщо вам потрібно використовувати IP-адресу, спробуйте додати .xip.io до кінця IP-адреси та додайте xip.io до своїх NSExceptionDomains. Див xip.io . Я підключаюся безпосередньо до IP при розробці (але не випускаю), і це чудово працює для мене.
tpankake

2
Не працювало для мене, поки я не зрозумів, що вклав його в неправильний інформаційний список у своєму тестовому проекті. Переконайтесь, що ви поставили його в потрібному!
Чаккі

144

Це швидке вирішення (але не рекомендується), щоб додати це до списку:

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

Що означає (згідно з документацією Apple ):

NSAllowsArbitraryLoads
Булеве значення, яке використовується для відключення безпеки транспорту додатків для будь-яких доменів, які не вказані в словнику NSExceptionDomains. Перелічені домени використовують налаштування, визначені для цього домену.

Значення за замовчуванням NO вимагає поведінки безпеки транспорту за замовчуванням для всіх з'єднань.

Я дуже рекомендую посилання:

які допомагають мені зрозуміти причини та всі наслідки.

XML (у файлі Info.plist) нижче:

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

заборонити довільні дзвінки для всіх сторінок, але для PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDEдозволить з'єднанням використовувати протокол HTTP.

До XML вище можна додати:

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

якщо ви хочете дозволити незахищені з'єднання для субдоменів вказаної адреси.

Найкращий підхід - заблокувати всі довільні навантаження (встановлені на помилкові) та додати винятки, щоб дозволити лише ті адреси, які ми знаємо.

Для зацікавлених читачів

Оновлення 2018 року:

Apple не рекомендує вимикати це. Більше інформації можна знайти на 207 сесії WWDC 2018 з більшою кількістю пояснень щодо безпеки

Залишивши оригінальну відповідь з історичних причин та фази розвитку


1
NSAllowsArbitraryLoadsповинно бутиfalse
Sound Blaster

@SoundBlaster, в якому випадку, і що ви бачите неправильно у моїй відповіді на відмову від голосування?
Джуліян Крул

додавши в plist (NSAppTransportSecurity NSAllowsArbitraryLoads), всі веб-сервіси працюють нормально, крім однієї веб-служби, однієї веб-служби повертають внутрішню помилку сервера (500) в iOS 9, але працюють добре в iOS8 або пізнішій версії
amit gupta

@SoundBlaster вніс зміни, тепер у вас не повинно бути заперечень :)
Julian Król

Дякую, як ти насправді додаєш <key>NSIncludesSubdomains</key> <true/>? Чи потрібно оточувати кожну обстановку <dict>? як ви редагуєте цей проклятий пліст-файл? Яке форматування? : D Дякую
Агент Зебра

116

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

З впровадженням iOS 9 для підвищення безпеки зв’язків між додатком та веб-службами безпечне з'єднання між додатком та його веб-службою повинно дотримуватися кращих практик . Засоби безпеки транспорту додатків застосовуються до:

  • запобігання випадкового розкриття та
  • забезпечити безпечну поведінку за замовчуванням.

Як пояснено в Технотеці безпеки транспорту додатків , під час спілкування з веб-службою App Transport Security тепер має такі вимоги та поведінку:

  • Сервер повинен підтримувати принаймні протокол протоколу безпеки транспортного рівня (TLS) версії 1.2.
  • Шифри підключення обмежені тими, що забезпечують секретність вперед (див. Перелік шифрів нижче.)
  • Сертифікати повинні бути підписані за допомогою SHA256 або кращого алгоритму хешування підпису, або 2048-бітовим або більшим ключем RSA, або 256-бітовим або більшим ключем Elliptic-Curve (ECC).
  • Недійсні сертифікати призводять до жорсткої несправності та відсутності з'єднання.

Іншими словами, ваш запит на веб-службу повинен: a.) Використовувати HTTPS та b.) Бути зашифрованим за допомогою TLS v1.2 з прямою секретністю.

Однак, як уже згадувалося в інших публікаціях, ви можете змінити цю нову поведінку від App Transport Security, вказавши незахищений домен у Info.plistсвоїй програмі.


Для перевизначення, вам потрібно буде додати NSAppTransportSecurity> NSExceptionDomainsсловникові властивості до Info.plist. Далі ви додасте домен веб-служби до NSExceptionDomainsсловника.

Наприклад, якщо я хочу обійти поведінку безпеки транспортного забезпечення додатків для веб-сервісу на хості www.yourwebservicehost.com, я б зробив наступне:

  1. Відкрийте додаток у Xcode.

  2. Знайдіть Info.plistфайл у «Навігаторі проектів» та клацніть на ньому «правою мишкою» та оберіть опцію меню « Відкрити як > вихідний код ». Файл списку властивостей з’явиться на правій панелі.

  3. Поставте наступний блок властивостей всередині словника основних властивостей (під першим <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>

Якщо вам потрібно надати винятки для додаткових доменів, ви додасте інше властивість словника внизу NSExceptionDomains.

Щоб дізнатися більше про ключі, на які посилалося вище, прочитайте цю вже згадану технологію .


1
Це працювало у двох моїх додатках, але воно не працює над третім. Хто-небудь ще стикався з ситуацією використання вищезазначеного виправлення і все-таки отримує те саме повідомлення про помилку? (і так, я оновив словник, щоб використовувати мій домен API, а не той у коді)
привітBB

Найкраще! Apple підтверджує, що це рішення використовує
YannSteph

Це працювало для файлу редагування додатків Cordova / Phonegap / Ionic ./platforms/ios/<project>/<project>-Info.plistз NSAllowsArbitraryLoads=falseбагатьма доменами виключень для служб із різними комбінаціями TLS / HTTP / HTTPS. Спочатку використовувався, NSAllowsArbitraryLoads=trueпотім відрегульований, усунення несправностей через випробування та помилки, щоб відповідати настановам та подати на затвердження. Зауваження config.xml <access origin=.../>щодо приміток частково заповнюють цей файл, але наразі потребує коригування шляхом прямого редагування або через XCode, щоб виправити деталі.
Джиммонт

Також <access origin="*"/>набори (у config.xml) NSAllowsArbitraryLoads=true(для програм Cordova / Phonegap / гібрид
jimmont

Чому NSExceptionAllowsInsecureHTTPLoadsвстановлено true? Ви підриваєте мету ОВС. Також див . Найнебезпечніший код у світі: перевірка SSL-сертифікатів у програмному забезпеченні, що не переглядає браузер . Ваше програмне забезпечення тільки що внесло список.
jww

67

Мені не подобається безпосередньо редагувати пліст. Ви можете легко додати його до списку за допомогою GUI:

  • Клацніть на списку Info.plist у Навігаторі зліва.
  • Тепер змініть дані в основній області:

    • В останньому рядку додайте +
    • Введіть назву групи: Налаштування безпеки транспорту додатків
    • Клацніть правою кнопкою миші на групі та виберіть Add Row
    • Введіть Дозволити довільні вантажі
    • Встановіть значення праворуч на ТАК

Приклад


Для уточнення: якщо "Дозволити довільні вантажі" ТАК, а є "Домени винятку", то дозволені навантаження обмежуються лише тими в Доменах винятку. Це правильно?

це безпечний спосіб зробити це, якщо я хочу випустити програму?
Ламур

Ні. Дозволяючи довільні навантаження, ваш додаток може вільно підключатися до будь-яких доменів. З точки зору безпеки, ви повинні контролювати та обмежувати, до якого домену / веб-сайту слід підключати додаток, щоб уникнути несподіваного використання мережі.
Раптор

Більшість додатків спрямовуються лише до відомих серверів. Це контролюється розробником. Тож питання безпеки відомі.
Вінсент

Чому NSAllowsArbitraryLoadsвстановлено YES? Ви підриваєте мету ОВС. Також див . Найнебезпечніший код у світі: перевірка SSL-сертифікатів у програмному забезпеченні, що не переглядає браузер . Ваше програмне забезпечення тільки що внесло список.
jww

25

Документ Apple 1

Документ Apple 2

Для цього є два рішення:

Рішення 1:

  1. У Info.plistфайл додайте словник з ключем ' NSAppTransportSecurity'
  2. Додайте ще один елемент всередині словника за допомогою ключа 'Allow Arbitrary Loads'

Plist структура повинна виглядати так, як показано на зображенні нижче.

Рішення 1

Рішення 2:

  1. У Info.plistфайл додайте словник з ключем ' NSAppTransportSecurity'
  2. Додати інший елемент всередині словника за допомогою клавіші ' NSExceptionDomains'
  3. Додайте елемент з ключем 'MyDomainName.com'типу NSDictionary
  4. Додайте елемент з ключем типу " NSIncludesSubdomains" Booleanі значення, встановлене якYES
  5. Додайте елемент з ключем типу " NSTemporaryExceptionAllowsInsecureHTTPLoads" Booleanі значення, встановлене якYES

Plist структура повинна виглядати так, як показано на зображенні нижче.

Рішення 2

Рішення 2 є кращим, оскільки воно дозволяє лише вибраний домен, тоді як рішення 1 дозволяє всі небезпечні з'єднання HTTP.


Чому NSAllowsArbitraryLoadsвстановлено YES? Ви підриваєте мету ОВС. Також див . Найнебезпечніший код у світі: перевірка SSL-сертифікатів у програмному забезпеченні, що не переглядає браузер . Ваше програмне забезпечення тільки що внесло список.
jww

20

Захист транспорту доступний на iOS 9.0 або новішої версії. Це попередження може виникнути під час спроби зателефонувати в службову службу всередині програми:

Безпека транспортування додатків заблокувала завантаження ресурсів HTTP (http: //) ясного тексту, оскільки це небезпечно. Тимчасові винятки можна налаштувати через файл Info.plist вашого додатка.

Додавання до списку Info.plist призведе до відключення АТС:

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

1
NSAllowsArbitraryLoads має бути помилковим, якщо це правда, це дозволяє все небезпечне з'єднання
Thiago Arreguy

додавши до списку всі прекрасні веб-сервіси, окрім однієї веб-служби, одна веб-служба повертає внутрішню помилку сервера (500) у iOS 9, але працює добре в iOS8 або пізнішій версії
amit gupta

1
Прийнято в магазині?
Врашабх Ірде

Дуже погана порада; див . найнебезпечніший код у світі: перевірка SSL-сертифікатів у програмному забезпеченні, що не переглядає браузер . З огляду на питання, чи сповнений рекомендований спосіб робити речі, відповіді "мені теж" не потрібні.
jww

15

Приклад розробки

Ось скріншот списку, який зберігає ATS неушкодженим (= захищеним), але дозволяє підключення до localhost можна здійснювати через HTTP замість HTTPS . Він працює в Xcode 7.1.1.

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


Чи є якісь способи зробити localhost захищеним, тобто за допомогою HTTPS, у нативному режимі реакції, щоб нам не довелося використовувати NSExceptionAllowsInsecureHTTPLoads - YESконфігурацію за замовчуванням ?
milkersarac

13

Перейдіть на свій Info.plist

  1. Клацніть правою кнопкою миші на порожньому просторі та натисніть кнопку Додати рядок
  2. Напишіть ключове ім'я як NSAppTransportSecurity, під ним
  3. Виберіть Домени винятку, Додайте до цього новий елемент
  4. Запишіть своє доменне ім’я, до якого потрібно отримати доступ
  5. Змініть тип домену зі String на Словник, додайте новий елемент
  6. NSTemvremeExceptionAllowsInsecureHTTPLoads, що буде булевим з істинним значенням. Подивіться на малюнок, щоб правильно його слідувати

1
Чому NSAllowsArbitraryLoadsвстановлено true? Ви підриваєте мету ОВС. Також див . Найнебезпечніший код у світі: перевірка SSL-сертифікатів у програмному забезпеченні, що не переглядає браузер . Ваше програмне забезпечення тільки що внесло список.
jww

13

На думку Apple, звичайно вимкнення АТС призведе до відхилення додатків, якщо у вас немає вагомих причин для цього. Вже тоді слід додати винятки для доменів, до яких ви можете безпечно отримати доступ.

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

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

і nscurl перевірить, чи не працює цей запит, а потім спробуйте різноманітні налаштування та точно скаже, який з них проходить і що робити. Наприклад, для якоїсь третьої URL-адреси, яку я відвідую, ця команда сказала мені, що цей словник передає:

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

Щоб розрізняти власні сайти та сторонні сайти, які не знаходяться під вашим контролем, використовуйте, наприклад, ключ NSThirdPartyExceptionRequiresForwardSecrecy.


1
його чудовий інструмент для перевірки перед тим, як насправді тестувати за допомогою програми. економити час. але будь-який ресурс, який слід прочитати, щоб зрозуміти, що склалося з цієї команди.
damithH

1
Цікавий інструмент. У моєму випадку це завищує речі. У ньому перераховано три клавіші, у тому числі NSExceptionAllowsInsecureHTTPLoads = true;, але виявляється, що одна не потрібна.
Кріс Принс,


10

ПРИМІТКА. Домен винятків у вашому списку повинен бути в нижньому випадку.

Приклад: ви назвали свій апарат "MyAwesomeMacbook" у розділі Налаштування-> Спільний доступ; ваш сервер (для тестових цілей) працює на MyAwesomeMacbook.local: 3000, і ваш додаток має надіслати запит на http: //MyAwesomeMacbook.local: 3000 / файли ..., у вашому списку потрібно вказати "myawesomemacbook. local "як домен виключення.

-

Ваш інформаційний список міститиме ...

<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

Використання:

Скріншот списку, щоб краще зрозуміти

Додайте новий елемент NSAppTransportSecurity у файл плістів із типом Словник , потім додайте підпункт NSAllowsArbitraryLoads у словник типу Boolean та встановіть значення bool ТАК . Це працює для мене.


1
NSAllowsArbitraryLoads має бути помилковим, якщо це правда, це дозволяє все небезпечне з'єднання
Thiago Arreguy

шляхом додавання в PLIST все веб - сервіс працює відмінно , за винятком послуг один веб один веб - сервіс повернення Внутрішня помилка сервера (500) в 9 прошивкою , але працює відмінно в iOS8 або пізніше @ThiagoArreguy
Аміт Гупта

Дуже погана порада; див . найнебезпечніший код у світі: перевірка SSL-сертифікатів у програмному забезпеченні, що не переглядає браузер . З огляду на питання, чи сповнений рекомендований спосіб робити речі, відповіді "мені теж" не потрібні.
jww

Я знаю, що це погана порада, але це лише рішення на даний момент у режимі розробки. Apple надала нам гнучкість, якби це не так вже й погано, вони б цього не допустили.
Техіндер

9

25.05.2015 (після оновлень Xcode 2015-09-18):

Я використовував не лінивий метод, але він не працював. Наступні мої спроби.

Спочатку,

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

І друге,

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

Нарешті, я використав метод ледачий:

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

Це може бути трохи небезпечно, але я не зміг знайти інших рішень.


Чому NSAllowsArbitraryLoadsвстановлено true? Ви підриваєте мету ОВС. Також див . Найнебезпечніший код у світі: перевірка SSL-сертифікатів у програмному забезпеченні, що не переглядає браузер . Ваше програмне забезпечення тільки що внесло список.
jww

9

У швидкості 4 та xocde 10 змінюється NSAllowsArbitraryLoads, щоб дозволяти довільні навантаження. тому це буде виглядати приблизно так:

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

6

Можливо, варто згадати, як дістатися ...

Info.plist - це один із файлів під Main.storyboard або viewController.swift.

Коли ви натискаєте на нього вперше, він зазвичай знаходиться у форматі таблиці, тому клацніть правою кнопкою миші файл і "відкрийте як" Вихідний код, а потім додайте код нижче до кінця, тобто:

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

Скопіюйте вставити код трохи вище

 "</dict>
</plist>"

що в кінці.


Чому NSAllowsArbitraryLoadsвстановлено true? Ви підриваєте мету ОВС. Також див . Найнебезпечніший код у світі: перевірка SSL-сертифікатів у програмному забезпеченні, що не переглядає браузер . Ваше програмне забезпечення тільки що внесло список.
jww

5

Оновлення для Xcode 7.1, зіткнувшись з проблемою 27.10.15:

Нове значення в Info.plist - "Налаштування безпеки транспорту додатків". Звідси цей словник повинен містити:

  • Дозволити довільні навантаження = ТАК
  • Домени винятку (введіть тут свій домен http)

4

Для тих, хто прийшов сюди, намагаючись знайти причину, чому їх WKWebView завжди білий і нічого не завантажує (саме так, як описано тут, як змусити WKWebView працювати швидко і для програми macOS ):

Якщо вся ракетна наука вище не працює, ви перевірте очевидне: налаштування пісочниці

налаштування пісочниці]

Будучи новим для швидкого та какао, але досить досвідченим у програмуванні, я витратив близько 20 годин на пошук цього рішення. Жоден із десятків навчальних посібників з hipster-iOS, ані яблучних ключових приміток - нічого не згадує цей невеликий прапорець.


О боже, спасибі тобі велике! Ти врятував мене ті самі 20 годин пошуку!
Брехт Махіельс

2
не бачачи цього розділу в розділі "Здатності" цілі (Xcode 9.4.1)
shim

3

За замовчуванням iOS дозволяє лише HTTPS API. Оскільки HTTP не захищено, вам доведеться відключити безпеку транспорту додатків. Є два способи відключення АТС: -

1. Додавання вихідного коду в проект info.plist та додавання наступного коду в тег root.

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

2. Використання інформації про проект.

Клацніть на проекті на лівій панелі, виберіть проект як цільовий та виберіть інформаційну вкладку. Ви повинні додати словник у наступній структурі.

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



1

Використання NSExceptionDomainsможе не застосовувати ефект одночасно, оскільки цільовий сайт може завантажувати ресурси (наприклад, jsфайли) із зовнішніх доменів http. Це можна вирішити, додавши також ці зовнішні домени NSExceptionDomains.

Щоб перевірити, які ресурси не можна завантажити, спробуйте скористатися віддаленою налагодженням. Ось підручник: http://geeklearning.io/apache-cordova-and-remote-debugging-on-ios/


0

Для Кордови, якщо ви хочете додати її у свій ios.json, зробіть наступне:

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

І він повинен бути всередині:

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

Просто <access origin = "*" /> у config.xml не працював. Не впевнений, чи потрібні обидва, але рішення ios.json запечатало угоду для мене.
zeusstl

Чому NSAllowsArbitraryLoadsвстановлено true? Ви підриваєте мету ОВС. Також див . Найнебезпечніший код у світі: перевірка SSL-сертифікатів у програмному забезпеченні, що не переглядає браузер . Ваше програмне забезпечення тільки що внесло список.
jww

-1

Як багато хто зазначав, це проблема, яка поставляється з iOS 9.0. Вони додали річ під назвою Безпека транспорту додатків, і мене теж дратувало, коли вона зламала мої програми.

Ви можете перев'язати його клавішею NSAllowsArbitraryLoads до ТАК під словником NSAppTransportSecurity у вашому файлі .plist, але в кінцевому підсумку вам потрібно буде повторно записати код, який формує ваші URL-адреси, щоб сформувати префікс HTTPS: //.

Apple переписала клас NSUrlConnection в iOS 9.0. Ви можете прочитати про це у NSURLConnection .

Інше, можливо, вам доведеться відмовитися від iOS 9.0, поки не встигнете реалізувати правильне рішення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.