Разрешить HTTP без отключения ATS в iOS

Я разрабатываю приложение, в котором есть небольшая настройка. он покажет предварительный просмотр данного URL-адреса (например, Facebook, whatsapp). но если URL-адрес «Пользовательский» находится в HTTP, я не мог загрузить предварительный просмотр при включении ATS. поэтому я отключил весь HTTPS-трафик с помощью NSAllowsArbitraryLoads . есть ли способ разрешить http с включенным ATS?


person Duke    schedule 28.06.2016    source источник


Ответы (3)


Согласно Apple, если вы используете более старый SDK, то есть iOS 8 или более раннюю версию, то ATS отключается. Я не знаю точно, что это означает, но я предполагаю, что это целевая настройка сборки Архитектуры, базовый SDK, а не настройка цели развертывания.

В этом видео подробно описаны изменения в ATS, недавно анонсированные на WWDC 2016. По состоянию на В начале 2017 года Apple отклонит ваше приложение, если вы используете какое-либо из следующих исключений ATS, И вы не можете предоставить для этого разумное обоснование:

  • NSAllowsArbitraryLoads
  • NSExceptionAllowsInsecureHTTPLoads
  • NSExceptionMinimumTLSVersion

Однако, похоже, вам будет разрешено использовать новое исключение под названием:

  • NSAllowsArbitraryLoadsInWebContent

это означает, что элемент управления WKWebView по-прежнему может загружать HTTP-контент. Не уверен, что это относится и к UIWebView.

В вашем случае, я предполагаю, вы не используете WKWebView, поэтому вам лучше начать работать над своим «разумным обоснованием». Или придерживайтесь iOS 8 SDK.

person Brett Donald    schedule 28.06.2016
comment
Как вы планируете создавать превью? С элементом управления WKWebView? Если это так, подождите, пока Apple выпустит NSAllowsArbitraryLoadsInWebContent, и используйте его. В противном случае вы можете создать превью на сервере и отправить их в свое приложение в виде изображения? - person Brett Donald; 30.06.2016

Вы можете добавить исключения (NSExceptionDomains), чтобы разрешить HTTP для определенных доменов. См. документация.

Однако, если указанный пользователем URL-адрес может быть любым URL-адресом, тогда нет другого пути, кроме как использовать NSAllowsArbitraryLoads.

person Code    schedule 28.06.2016
comment
Я пытался перехватить трафик приложения Facebook ios с помощью burp-proxy, и трафик проходит через HTTPS, но они все еще показывают превью для HTTP-ссылок. они не пропускают ATS. это означает, что есть какой-то способ сделать это. нет? - person Duke; 28.06.2016
comment
@Duke Да, есть способ - используйте NSAllowsArbitraryLoads. - person Code; 28.06.2016
comment
Я пытаюсь сделать так, как это сделал facebook. Разрешить HTTP с SSL (ATS). - person Duke; 28.06.2016
comment
@Duke Вы не имеете никакого смысла. HTTP с SSL — это HTTPS. - person Code; 28.06.2016
comment
Извините, что заставил вас потеряться :D . NSAllowsArbitraryLoads делает мое приложение полностью HTTP/прозрачным на сетевом уровне, и любой может пронюхать, что происходит в трафике. Я не хочу отключать ATS для всего приложения для этой крошечной настройки (предварительный просмотр для ссылок). есть ли способ отключить ATS только для этой функции? - person Duke; 28.06.2016
comment
@Duke NSAllowsArbitraryLoads просто разрешает HTTP. HTTPS по-прежнему будет безопасным. Это не делает приложения прозрачными на сетевом уровне. - person Code; 28.06.2016
comment
Просто подумайте об ATS как о наборе ограничений, которые предотвращают создание небезопасных соединений. По сути, Apple заставляет всех использовать HTTPS с TLSv1.2 и FS. Отключение ATS просто снимает эти ограничения и позволяет вашему приложению делать все, что ему заблагорассудится — использовать сочетание безопасных и небезопасных соединений. - person Brett Donald; 30.06.2016

Откройте Info.plist как исходный код, затем добавьте его туда, куда хотите:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <false/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>aWebsite.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
            </dict>
            <key>anotherWebsiteIfYouWant.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
            </dict>
        </dict>
    </dict>

Таким образом, вам не придется полностью отключать ATS.

person AnthoPak    schedule 28.06.2016
comment
Мы не знаем ввод пользователя. это может быть любой URL-адрес HTTP - person Duke; 28.06.2016
comment
Извините, я этого не заметил. Вы можете увидеть этот пост о том, как писать в info.plist во время время выполнения, но я не уверен в этом... - person AnthoPak; 28.06.2016