Транспортная безопасность заблокировала открытый текст 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
Якуб Трухларж


@ Джиф, почему вы добавили тег iOS 10? были ли какие-либо дополнительные изменения в iOS 10 в этом отношении? Я чувствую, что это было введено в iOS9, и этого тега должно быть достаточно с точки зрения версий iOS
Джулиан Крол

Ответы:


469

Если вы используете Xcode 8.0+ и Swift 2.2+ или даже Objective 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). Таким образом это сделало бы противоположность того, что желательно. NSAllowsArbirtraryLoads должен быть установлен в false здесь. больше информации: Apple, документы
Фрик Сандерс

1
Согласитесь, с какой стати все это голосуют? нет смысла использовать NSAllowsArbitraryLoads, если вы устанавливаете домен исключения.
Тибо Ной

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

950

Использовать NSAppTransportSecurity:

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

Вы должны установить NSAllowsArbitraryLoads ключ к YES под NSAppTransportSecurity словаря в вашем info.plist файла.

Конфигурация Plist


157
Пусть это будет известно: это обходной путь! Каждый раз, когда вы используете HTTP через HTTPS, вы открываете устройства вашего пользователя для уязвимостей. Конечно, это маловероятно во многих случаях, но этическое программирование - лучшая практика. Просто скажи ... - также +1 за работу (в целях тестирования)
Джексонкр

36
Это не решение - это взлом! Чтобы добавить отдельные «исключения» домена, см. Ответ ниже: stackoverflow.com/a/32560433/1103584
DiscDev

17
Хотя известно, что это решение уязвимо, это единственное решение, которое я бы порекомендовал во время РАЗРАБОТКИ . Необходимость вводить каждый конкретный домен во время разработки просто глупо (особенно если вы используете сторонние веб-сервисы).
Рец

6
Название этих ключей теперь изменилось: «Настройки безопасности транспорта приложения» в разделе «Разрешить произвольные загрузки»
vishal dharankar

11
Почему так много людей против этого решения? Это определенно НЕ взломать! Многие приложения должны общаться с реальным Интернетом, где протокол безопасности не всегда находится под вашим контролем. Например, кажется разумным иметь возможность показывать изображения с других серверов, которые не имеют SSL-сертификата.
Орен

825

Вот настройки визуально:

визуальные настройки для NSAllowsArbitraryLoads в info.plist через графический интерфейс Xcode


10
У меня нет такой возможности.
Пользователь

25
Если вы откроете свой Info.plist напрямую, вы можете просто добавить словарь NSAppTransportSecurity , а затем создать в нем элемент NSAllowsArbitraryLoads (см. Ответ, отредактированный Умаром Фаруком ниже).
Stoph

3
То же самое здесь - домены исключений не работали с 7.3 для меня.
RegularExpression

4
Эта опция не существует - XCode 7.3.1
jameshfisher

3
Информация от @JoshPinter работала для меня с XCode 8.
Мэтью Беллантони,

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 откройте ваш info.plist в текстовом редакторе
Дэн Болье,

7
Я все еще получаю сообщение об ошибке: домен исключения установлен, а NSAllowsArbitraryLoads имеет значение false. Даже если NSAllowsArbitraryLoads установлен в true, ошибка появляется. У кого-нибудь еще есть эта проблема?
klaevv

3
По состоянию на 1/30/2016 Apple , DOC показывает , что ключи больше не имеют временное слова в них, например: NSExceptionAllowsInsecureHTTPLoads NSExceptionMinimumTLSVersion См developer.apple.com/library/prerelease/ios/documentation/...
Филипп Монне

3
В случае, если кто-то еще вырывает свои волосы, потому что эти простые изменения в info.plist не работают .. добавьте изменения в Project> Target> Info> Custom Target Properties для iOS
BlueGuy

330

Это было проверено и работало на iOS 9 GM seed - это конфигурация, позволяющая определенному домену использовать 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
ЭТО должно быть отмечено как ответ. Протестировано и работает на iOS 9 GM seed, чтобы позволить определенному домену использовать http, не выбирая "ленивый" способ и полностью открывая ваше приложение.
DiscDev

2
Как мне добавить это в мой info.plist?
JMStudios.jrichardson

8
Хорошо, я добавил эту запись в свой info.plist и все еще получаю эту ошибку: «App Transport Security заблокировал загрузку ресурса HTTP (http: //) в виде открытого текста, поскольку он небезопасен. Временные исключения можно настроить с помощью информации вашего приложения. .plist file. "
KMC

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

2
Не работал на меня, пока я не понял, что поместил его в неправильный список info.plist в моем тестовом проекте. Удостоверьтесь, что Вы поместили это в правильный!
Чаки

144

Это быстрый обходной путь (но не рекомендуется), чтобы добавить это в plist:

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

Что означает (согласно документации Apple ):

NSAllowsArbitraryLoads
Логическое значение, используемое для отключения App Transport Security для любых доменов, не перечисленных в словаре NSExceptionDomains. Перечисленные домены используют настройки, указанные для этого домена.

Значение по умолчанию NO требует поведения App Transport Security по умолчанию для всех соединений.

Я действительно рекомендую ссылки:

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

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>

запретить произвольные вызовы для всех страниц, но for PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDEпозволит этим соединениям использовать протокол HTTP.

К приведенному выше XML вы можете добавить:

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

если вы хотите разрешить незащищенные соединения для поддоменов указанного адреса.

Наилучший подход состоит в том, чтобы заблокировать все произвольные загрузки (установить в false) и добавить исключения, чтобы разрешить только те адреса, которые нам известны.

Для заинтересованных читателей

2018 Обновление:

Apple не рекомендует отключать это - больше информации можно найти в 207 сессии WWDC 2018 с большим количеством вещей, объясненных относительно безопасности

Оставив первоначальный ответ по историческим причинам и фазе разработки


1
NSAllowsArbitraryLoadsдолжно бытьfalse
Sound Blaster

@SoundBlaster для какого случая и что вы видите неправильно в моем ответе на голосование?
Джулиан Крол

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

@SoundBlaster внес изменения, теперь у вас не должно быть возражений :)
Джулиан Крол

Спасибо, как вы на самом деле добавить <key>NSIncludesSubdomains</key> <true/>? Каждый параметр должен быть окружен <dict>? как вы редактируете этот чертов файл plist? Что за форматирование? : D Спасибо.
Агент Зебра

116

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

С появлением iOS 9 для повышения безопасности соединений между приложением и веб-сервисами безопасные соединения между приложением и его веб-сервисом должны соответствовать передовым методам . Поведение лучших практик обеспечивается App Transport Security для:

  • предотвратить случайное раскрытие и
  • обеспечить поведение по умолчанию, которое является безопасным.

Как объяснено в Technote App Transport Security , при связи с веб-службой App Transport Security теперь предъявляет следующие требования и поведение:

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

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

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


Чтобы переопределить, вам нужно добавить NSAppTransportSecurity> NSExceptionDomainsсвойства словаря к вашему Info.plist. Далее вы добавите домен вашего веб-сервиса в NSExceptionDomainsсловарь.

Например, если я хочу обойти поведение App Transport Security для веб-службы на узле www.yourwebservicehost.com, я бы сделал следующее:

  1. Откройте свое приложение в Xcode.

  2. Найдите Info.plistфайл в Project Navigator, щелкните его правой кнопкой мыши и выберите пункт меню « Открыть как > Исходный код» . Файл списка свойств появится на правой панели.

  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.

Чтобы узнать больше о ключах, упомянутых выше, прочитайте этот уже упомянутый technote .


1
Это работало в 2 моих приложениях, но не работает в 3-м. Кто-нибудь еще сталкивался с ситуацией использования вышеуказанного исправления и тем не менее получал то же сообщение об ошибке? (и да, я обновил словарь, чтобы использовать мой домен API, а не тот, что в коде)
helloB

Лучший ! 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

Я не люблю редактировать список напрямую. Вы можете легко добавить его в список с помощью графического интерфейса:

  • Нажмите на Info.plist в навигаторе слева.
  • Теперь измените данные в основной области:

    • В последней строке добавьте +
    • Введите название группы: App Transport Security Settings
    • Щелкните правой кнопкой мыши группу и выберите Add Row
    • Введите Разрешить Произвольные Нагрузки
    • Установите значение справа ДА

пример


Чтобы уточнить: если «Разрешить произвольные загрузки» - это ДА, а существуют «Домены исключений», то разрешенные нагрузки ограничиваются теми, которые указаны в доменах исключений. Это верно?

это безопасный способ сделать это, если я хочу выпустить приложение?
Lamour

Нет . Позволяя произвольные нагрузки, ваше приложение может подключаться к любым доменам свободно. С точки зрения безопасности, вы должны контролировать и ограничивать, к какому домену / веб-сайту должно подключаться приложение, чтобы избежать неожиданного использования сети.
Raptor

Большинство приложений направляются только на известные серверы. Это контролируется разработчиком. Так что вопросы безопасности известны.
Винсент

Почему NSAllowsArbitraryLoadsустановлено YES? Вы подрываете цель ОВД. Также см . Самый опасный код в мире: проверка SSL-сертификатов в не браузерном программном обеспечении . Ваша программа только что попала в список.
17

25

Apple Document 1

Apple Document 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 или более поздней версии. Вы можете получить это предупреждение при попытке вызвать WS внутри вашего приложения:

Application Transport Security заблокировал загрузку ресурса HTTP (http: //) в виде открытого текста, поскольку он небезопасен. Временные исключения можно настроить с помощью файла Info.plist вашего приложения.

Добавление следующего в ваш Info.plist отключит ATS:

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

1
NSAllowsArbitraryLoads должно быть ложным, если оно истинно, оно разрешает все небезопасные соединения
Тьяго Аррегуи

добавив в plist все веб-службы, работающие нормально, за исключением одного веб-сервиса, один веб-сервис возвращает внутреннюю ошибку сервера (500) в iOS 9, но работает нормально в iOS8 или более поздней версии
amit gupta

1
Принят в магазин?
Vrashabh Irde

Очень плохой совет; см . Самый опасный код в мире: проверка SSL-сертификатов в небраузерном программном обеспечении . Если ответить на вопрос о том, достаточно ли рекомендованного способа сделать что-либо, ответы «я тоже» не нужны.
jww

15

Пример разработки

Вот скриншот plist, который сохраняет ATS нетронутым (= безопасным), но позволяет устанавливать соединения с localhost через HTTP вместо HTTPS . Работает в Xcode 7.1.1.

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


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

13

Перейти к вашему Info.plist

  1. Щелкните правой кнопкой мыши на пустом месте и нажмите Добавить строку
  2. Напишите имя ключа как NSAppTransportSecurity, под ним
  3. Выберите Exception Domains, добавьте новый элемент к этому
  4. Запишите ваше доменное имя, которое необходимо получить доступ
  5. Измените тип домена со строки на словарь, добавьте новый элемент
  6. NSTeditionalExceptionAllowsInsecureHTTPLoads, это будет логическое значение с истинным значением. Посмотрите на картинку, чтобы следовать ей правильно

1
Почему NSAllowsArbitraryLoadsустановлено true? Вы подрываете цель ОВД. Также см . Самый опасный код в мире: проверка SSL-сертификатов в не браузерном программном обеспечении . Ваша программа только что попала в список.
jww

13

По словам Apple, обычно отключение ATS приведет к отклонению приложения, если только у вас нет для этого веской причины. Даже тогда вы должны добавить исключения для доменов, к которым вы можете получить безопасный доступ.

У 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 / files ..., в вашем списке свойств вам нужно будет указать "myawesomemacbook. локальный »в качестве домена исключения.

-

Ваш info.plist будет содержать ...

<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

Использование:

Скриншот PList, чтобы понять лучше

Добавьте новый элемент NSAppTransportSecurity в plist -файл с типом Dictionary , затем добавьте подэлемент NSAllowsArbitraryLoads в словарь типа Boolean и установите значение bool YES . Это работает для меня.


1
NSAllowsArbitraryLoads должен иметь значение false, если true, то разрешает все небезопасные соединения
Тьяго Аррегуй

добавив в plist все веб-службы, работающие нормально, кроме одного веб-службы, один веб-сервис возвращает внутреннюю ошибку сервера (500) в iOS 9, но работает нормально в iOS8 или более поздней версии @ThiagoArreguy
gupta

Очень плохой совет; см . Самый опасный код в мире: проверка SSL-сертификатов в небраузерном программном обеспечении . Если ответить на вопрос о том, достаточно ли рекомендованного способа сделать что-либо, ответы «я тоже» не нужны.
jww

Я знаю, что это плохой совет, но пока это только решение в режиме разработки. Apple предоставила нам гибкость, если это так плохо, они бы этого не допустили.
Tejinder

9

2015-09-25 (после обновлений 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

В swift 4 и xocde 10 измените NSAllowsArbitraryLoads на Allow Произвольные загрузки. так это будет выглядеть так:

<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-сертификатов в не браузерном программном обеспечении . Ваша программа только что попала в список.
17

5

Обновление для Xcode 7.1, сталкивающееся с проблемой 27.10.15:

Новое значение в Info.plist - «Настройки безопасности транспорта приложения». Оттуда этот словарь должен содержать:

  • Разрешить произвольные нагрузки = ДА
  • Домены исключений (укажите здесь свой http-домен)

4

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

Если все вышеперечисленное в области ракетостроения не работает, проверьте очевидное: настройки песочницы

настройки песочницы]

Будучи новичком в Swift и Cocoa, но довольно опытным в программировании, я потратил около 20 часов, чтобы найти это решение. Ни один из десятков руководств по хипстерам для iOS, ни яблочных лейтмотивов - ничто не упоминает этот маленький флажок.


Боже мой, большое спасибо! Вы сохранили мне тот же 20-часовой поиск!
Брехт Мачиэльс

2
не видеть этот раздел в разделе Возможности цели (Xcode 9.4.1)
shim

3

По умолчанию iOS поддерживает только HTTPS API. Поскольку HTTP не является безопасным, вам придется отключить безопасность транспорта приложения. Есть два способа отключить ATS:

1. Добавьте исходный код в info.plist проекта и добавьте следующий код в корневой тег.

<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

Для Cordova, если вы хотите добавить его в свой 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. Они добавили что-то под названием App Transport Security, и я тоже был раздражен, когда он сломал мои приложения.

Вы можете перевязать его с помощью ключа NSAllowsArbitraryLoads на YES в словаре NSAppTransportSecurity в вашем файле .plist, но в конечном итоге вам нужно будет переписать код, который формирует ваши URL, чтобы сформировать префикс HTTPS: //.

Apple переписала класс NSUrlConnection в iOS 9.0. Вы можете прочитать об этом в NSURLConnection .

Иначе вам, возможно, придется отказаться от iOS 9.0, пока у вас не будет времени, чтобы реализовать правильное решение.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.