#ios #security #app-transport-security
#iOS #Безопасность #приложение-транспорт-безопасность
Вопрос:
Итак, у меня есть список из тысяч URL-адресов, к которым можно получить доступ в моем приложении, многие из которых небезопасны (ATS в настоящее время отключен), а также некоторые из которых перенаправляют на несколько других URL-адресов. Что мне нужно сделать, так это найти какой-то способ автоматизации этого процесса, чтобы выдать список небезопасных ссылок. У кого-нибудь есть идеи?
Комментарии:
1. Похоже, вам просто нужно отключить ATS. В iOS 10 вы можете использовать
NSAllowsArbitraryLoadsInWebContent
, если ваши небезопасные URL-адреса находятся только в веб-представлении, но если ваше приложение работает на версиях более ранних, чем iOS 10, то отключение ATS — единственный реальный вариант. Я бы сосредоточился на создании исключений для доменов, где, как вы знаете, TLS доступен и важен (например, серверы, на которых вы используете API)2. Необходимо вернуться к поддержке iOS 8. Я думаю, что я попытаюсь написать приложение командной строки, которое проверяет URL-адреса.
3. Это звучит довольно хрупко; что произойдет, если один из этих веб-сайтов изменится после выпуска вашего приложения? Я бы отключил ATS и закончил.
4. Это не будет приложение, это будет скрипт командной строки, который запускается в задании cron, который извлекает список URL-адресов и анализирует их. Я просто надеюсь, что Cocoa Webview и UIWebView соответствуют тем же ограничениям ATS.
5. Но разве вы не собираетесь использовать скрипт для создания списка исключений для вашего приложения iOS? Исключения ATS находятся в Info.plist, поэтому вы не сможете обновить его, не выпустив новую версию своего приложения.
Ответ №1:
Вы могли бы написать сценарий вызова nscurl для запуска по URL-адресам. В принципе, со списком URL-адресов в текстовом файле, например:
urls.txt
https://www.apple.com
https://www.reddit.com
http://snopes.com
http://www.yahoo.com
https://www.google.com
вы могли бы создать скрипт
ats_check.sh
#!/bin/sh
while read URL
do
nscurl --ats-diagnostics ${URL} 2>/dev/null > ats_results.txt
if grep -q "Result : FAIL" ats_results.txt; then
echo "${URL} failed ATS checks. run 'nscurl --ats-diagnostics ${URL}' for more details."
else
# echo "${URL} passed ATS checks."
echo "."
fi
done < urls.txt
rm ats_results.txt
В принципе, если он не проходит КАКОЙ-либо тест в вызове nscurl, он отобразит URL.
Обратите внимание, что для nscurl требуется Mac OS 10.11 или более поздней версии.
Комментарии:
1. Кроме того, это может занять некоторое время, поскольку проверка ATS может занять некоторое время, особенно на более медленных сайтах. Я добавил точку для тех, которые прошли успешно, но вы можете удалить весь блок else, если просто хотите распечатать наши неудачные URL-адреса.
Ответ №2:
В итоге я написал приложение CLI, которое использует WebView для загрузки всех URL-адресов в мой файл данных и сбрасывает все URL-адреса с ошибкой в текстовый файл.
Комментарии:
1. У вас не сработал мой скрипт? В основном он делает то, что вам нужно, без необходимости писать приложение. Ваше приложение не поможет другим в stack overflow в будущем, если вы не опубликуете источник и не предоставите ссылку.
2. @wottle Хотя ваш скрипт великолепен, мне нужно немного сложнее. В основном мой инструмент будет искать в текущем каталоге, сортировать все файлы csv по дате и использовать самый новый в качестве входного файла. Затем инструмент запустит 20 веб-просмотров, чтобы начать проверку URL-адресов, извлеченных из сериализованной очереди данных, извлеченных из файла данных, которые включают URL-адрес и связанный идентификатор GUID. После обработки данных инструмент выводит недопустимый URL-адрес, идентификатор GUID и все перенаправления на небезопасный URL-адрес. Хотя все это, вероятно, можно было бы сделать с помощью сценария оболочки, никто в моей команде не смог бы его поддерживать.
3. @wottle Как только я закончу, я рассмотрю возможность использования инструмента open sourcing для других пользователей.
4. Хорошо, это определенно сложнее, чем в вашем исходном сообщении. Удачи с проектом.
5. @wottle Спасибо. Область определенно расширилась с момента первоначального сообщения. Поди разберись 😉