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 доменов с целью передачи других запросов другим приложениям. Если бы это был веб-браузер, у меня были бы определенные настройки для моих служб (которые я контролирую и знаю), а остальные были бы произвольными.

Другие вопросы по тегам