Безопасность транспорта приложений ATS: URL-адрес HTTP внутри Webview

У нас есть приложение, которое показывает HTML-контент в Webview. В настоящее время контент, предоставляемый Webview, поступает из незащищенного домена. Начиная с iOS10, он должен обслуживаться из защищенного домена, поэтому перед миграцией хочу развеять некоторые сомнения.

  1. Должна ли защищенная HTML-страница (https) также иметь ссылки CSS и JS с защищенного сервера? Поскольку некоторые CSS и JS могут быть с третьего сервера.

  2. Если защищенная HTML-страница (https) загружается в Webview и имеет некоторые незащищенные ссылки (http), будут ли эти ссылки загружаться в Webview, когда пользователь нажимает на нее?

Заранее спасибо за вашу помощь.


person miOS    schedule 05.08.2016    source источник
comment
Если ваше приложение получает доступ к любому содержимому, отличному от https, вам нужно либо конкретное исключение (если вы знаете, каким будет сервер), либо общее исключение (т. е. отключить ATS), если содержимое может поступать откуда угодно. Если вы используете SFSafariViewController, вам не нужно отключать ATS. Если вы используете UIWebView или WKWebView, вы делаете stackoverflow.com/questions/31065204/   -  person Paulw11    schedule 05.08.2016
comment
Спасибо @Paulw11 за ответ. SFSafariViewController доступен в iOS9, но у нас есть клиенты, которые все еще используют устройства iOS7. Начиная с iOS10, Apple не разрешает исключения (т. е. отключает ATS), и все запросы должны быть защищены. Итак, учитывая мой вопрос, нужно ли мне обслуживать CSS, JS и ссылки внутри содержимого HTML должны быть защищены?   -  person miOS    schedule 05.08.2016
comment
Во-первых, он начинается не с iOS 10, а с приложений, представленных после конца этого года. Он будет применен при отправке. Также неправда, что Apple не допускает исключений. Они позволят вам делать исключения, но, похоже, они будут запрашивать обоснование при отправке, и они могут отклонить или не отклонить ваше приложение, если ваше обоснование недостаточно хорошее.   -  person wottle    schedule 05.08.2016
comment
Что касается вашего вопроса, я считаю, что встроенные ресурсы/ссылочные ресурсы также должны быть защищены, если вы загружаете их в UIWebView. Вы, конечно, всегда можете попробовать это в своем приложении, чтобы проверить. Просто удалите исключения ATS из вашего Info.plist, а затем укажите в UIWebView безопасный URL-адрес, который содержит ссылки на незащищенные файлы css или js. Тогда вы сможете точно ответить на свой вопрос. Я никогда этого не делал, поэтому не могу сказать с полной уверенностью. Или может у кого есть и выложит.   -  person wottle    schedule 05.08.2016
comment
Спасибо @wottle за ответ. Я попытаюсь создать тестовую среду для проверки вышеуказанных случаев.   -  person miOS    schedule 09.08.2016


Ответы (1)


Я провел быстрый тест, и оказалось, что любые ресурсы, на которые есть ссылки, которые необходимо загрузить с помощью UIWebView для правильного отображения страницы, должны соответствовать правилам ATS, а также соответствовать всем исключениям, которые вы указали в Info.plist для вашего проекта. Если я пытался перейти по ссылке на не-https-сайт в UIWebView, это также выдавало мне ошибки.

Я думаю, что лучше всего будет использовать SFSafariViewController условно для пользователей iOS 9. Вы можете продолжать использовать UIWebView для устройств iOS 7 и iOS 8, которые строго не применяют ATS. Это накладывает дополнительный код, но он должен быть минимальным.

Кроме того, просто разъяснение изменений Apple в отношении обеспечения безопасности транспорта приложений. Они объявили, что App Transport Security потребуется для приложений, отправленных после 31 декабря 2016 г.. Это означает, что влияние зависит не столько от операционной системы устройства пользователя, сколько от разработчиков, которые отправляют заявку. Кроме того, Apple по-прежнему разрешает добавлять исключения, если у вас есть обоснование. Мы еще не знаем, какие типы оправданий Apple позволит. Наконец, Apple заявила на своей сессии WWDC, что приложения могут по-прежнему включать исключение из части требований ATS, касающейся прямой секретности, без отдельного обоснования. Однако, пока мы не доберемся до 01.01.2017, мы не будем знать наверняка, как это будет работать.

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

person wottle    schedule 11.08.2016
comment
Спасибо @wottle за ваш вклад. - person miOS; 12.08.2016