Как в 2017 году мы должны обрабатывать запросы по локальной сети без HTTPS в отношении настроек ATS?

Насколько я понимаю, в 2017 году Apple отклонит все приложения, для которых Allow Arbitrary Loads включен в Info.plist:

Настройки АТС

См. также: https://nabla-c0d3.github.io/blog/2016/08/14/ats-enforced-2017/

Наше приложение управляет смарт-устройствами в доме пользователя. При этом мы не разговариваем с Интернетом, а только с устройствами локальной сети через HTTP. Все эти устройства не поддерживают HTTPS. Как мы должны настроить эти App Transport Security Settings, чтобы наше приложение не было отклонено Apple?

Изменить: Apple отложила требование SSL/ATS до 1/ 1/2017


person Lars Blumberg    schedule 12.12.2016    source источник


Ответы (1)


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

Так что, к сожалению, нет отличного решения для блокировки ресурсов локальной сети ATS в iOS 9. Насколько я вижу, у вас есть 2 варианта.

  1. Продолжайте поддерживать iOS 9 и добавляйте глобальное исключение ATS и надейтесь, что когда вы отправите свое приложение после 31 декабря 2016 г., Apple примет ваше обоснование необходимости поддержки iOS 9 и доступа к локальным сетевым ресурсам с отключенным ATS. До 01.01.2017 будет трудно понять, какие типы обоснований будут рассматриваться Apple как разумные, но Apple ясно дала понять, что будет процесс обоснования использования приложениями исключений ATS. Если вы пойдете по этому пути, я бы попытался выпустить небольшое обновление приложения в начале января с все еще действующим исключением ATS, чтобы посмотреть, сможете ли вы справиться с этим процессом.

  2. Прекратите поддержку iOS 9, удалите общее исключение ATS (NSAllowArbitratyLoads) и используйте вместо этого исключение NSAllowsLocalNetworking, чтобы отключить защиту ATS только для трафика локальной сети. Это не поддерживается в iOS9, поэтому вам нужно, чтобы новое приложение было только для iOS 10. По сути, локальный трафик на устройствах iOS9, у которых только для записи NSAllowsLocalNetworking plist установлено значение true, будет заблокирован ATS. В зависимости от вашей клиентской базы это может быть возможно. Пользователи iOS 9 по-прежнему смогут получить последнюю версию приложения перед выпуском iOS 10.

Изменить:

Таким образом, похоже, что Apple использует некое пользовательское поведение в iOS 10, чтобы сделать приложения на iOS 10 более безопасными, а также обеспечить обратную совместимость с iOS 9. Если вы включите в свой info.plist и NSAllowsArbitraryLoads, и NSAllowsLocalNetworking, iOS9 будет только распознать запись NSAllowsArbitraryLoads и разрешить весь трафик (не очень хорошо с точки зрения безопасности, но сработает для трафика вашей локальной сети). В iOS 10 использование NSAllowsLocalNetworking приведет к тому, что iOS 10 проигнорирует запись NSAllowsArbitraryLoads, то есть ваше приложение обеспечит применение ATS для нелокальных подключений, но позволит проходить локальным подключениям. Очевидно, что вы должны протестировать свое приложение как на iOS 9, так и на 10, но это было бы идеально с точки зрения безопасности, если вам все еще нужно поддерживать iOS 9. Важно отметить, что вам все равно нужно будет предоставить Apple обоснование, но с учетом что Apple добавила эту функциональность для обработки именно этого сценария, я готов поспорить, что обратная совместимость будет приемлемым оправданием.

Из документация:

В iOS 10 и более поздних версиях и macOS 10.12 и более поздних версиях значение этого ключа игнорируется, если в файле Info.plist вашего приложения присутствует какой-либо из следующих ключей:

NSAllowsArbitraryLoadsForMedia
NSAllowsArbitraryLoadsInWebContent
NSAllowsLocalNetworking
person wottle    schedule 12.12.2016