iOS9 ATS: как насчет приложений на основе HTML5?
Согласно документации с https://developer.apple.com/library/content/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html, Apple заставляет использовать HTTPS через HTTP в iOS 9.
App Transport Security
App Transport Security (ATS) позволяет приложению добавить объявление в свой файл Info.plist, в котором указаны домены, с которыми ему необходимо защищенное соединение. ATS предотвращает случайное раскрытие, обеспечивает безопасное поведение по умолчанию и проста в применении. Вы должны принять ATS как можно скорее, независимо от того, создаете ли вы новое приложение или обновляете существующее.
Если вы разрабатываете новое приложение, вы должны использовать исключительно HTTPS. Если у вас есть существующее приложение, вы должны использовать HTTPS настолько, насколько вы можете прямо сейчас, и составить план миграции остальной части вашего приложения как можно скорее.
Что это значит для веб-приложений, особенно Sencha Touch и Cordova / PhoneGap основаны? Мое веб-приложение можно настроить на любой адрес сервера, поэтому я не могу внести их в белый список в файле plist. Будет ли это применимо только к приложениям, которые используют собственные запросы (через NSURLRequest и т. Д.)?
4 ответа
Если вы не уверены, к какому URL-адресу будет подключаться ваше приложение или если вы подключаетесь ко многим URL-адресам, вы можете обойти ATS (App Transport Security), добавив следующие ключи в файл info.plist.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key> <true/>
</dict>
Попробуй это:cordova plugin add https://github.com/robertklein/cordova-ios-security.git
Это добавит следующую часть к *-Info.plist
файл в процессе сборки:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key> <true/>
</dict>
Как работать с SSL в iOS9, Одно из решений заключается в следующем:
Как говорят Apple:
iOS 9 и OSX 10.11 требуют TLSv1.2 SSL для всех хостов, с которых вы планируете запрашивать данные, если вы не укажете домены исключений в файле Info.plist вашего приложения.
Синтаксис для конфигурации Info.plist выглядит следующим образом:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>yourserver.com</key>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<!--Include to allow insecure 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>
<!--Connect to anything (this is probably BAD)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Если вам нужно сделать это, вероятно, лучше обновить серверы, чтобы они использовали TLSv1.2 и SSL, если они этого еще не сделали. Это следует рассматривать как временное решение.
На сегодняшний день в предварительной версии не упоминается ни один из этих параметров конфигурации каким-либо конкретным способом. Как только это произойдет, я обновлю ответ, чтобы перейти к соответствующей документации.
Вот демо (Demo1)
Apple на самом деле ничего не навязывает, у них просто есть настройки фреймворка по умолчанию и, таким образом, они способствуют большей безопасности в интересах приложения и пользователей его сервисов. Это означает, что до тех пор, пока гибридный инструментарий не объединит детали в существующие продукты, необходимо внести коррективы в соответствующие файлы конфигурации с некоторым пониманием деталей (см. Связанный ответ + комментарий ниже). Потратив время на решение именно этой проблемы, я предлагаю изначально разработать локально, разрешив произвольные нагрузки и обходя ATS. Если ATS требуется для утверждения в магазине приложений, как только вы будете готовы начать тестирование с более широкой группой пользователей, включите ATS (и явно отключите произвольную загрузку), а затем настройте исключения по умолчанию на необходимые параметры. Основной вопрос, который нужно задать для каждого домена, - разрешать ли субдомены, настраивать версии TLS по мере необходимости и разрешать ли небезопасный http. Мое приложение имеет около 20 доменов с целью передачи других запросов другим приложениям. Если бы это был веб-браузер, у меня были бы определенные настройки для моих служб (которые я контролирую и знаю), а остальные были бы произвольными.