Безопасное шифрование https для приложения iPhone на веб-странице

Я хочу продать приложение для iPhone, в котором будет размещено одно веб-представление на веб-странице, например, http://www.myapp.com/webview/ Я бы хотел, чтобы приложение эффективно сохраняло учетные данные, необходимые для аутентификации на веб-сайте (т.е. только тот, кто купил приложение, может просматривать эту страницу)

Как еще у меня было бы безопасное, простое веб-просмотр на iPhone, не требуя, чтобы пользователь входил в систему (по сути, если они покупают приложение, это будет означать их аутентификацию на странице)

Может кто-нибудь помочь с этим?

1 ответ

Решение

Нет абсолютного способа достичь этой цели. Если у вас есть веб-служба, которая использует общие учетные данные (один из которых входит в приложение), то можно будет выполнить обратный инжиниринг этих учетных данных. В конечном итоге невозможно гарантировать, что клиент, работающий на другом компьютере, является "вашим" клиентом.

Там было много дискуссий об этом. Это не безнадежно, только невозможно решить 100% (или даже 90%). Простой общий секрет через SSL остановит большинство ваших злоумышленников, не нанося вреда вашим пользователям и не тратя много денег на разработку. Это запутывание, а не безопасность, но дешевый и "в основном эффективный" гораздо лучше, чем дорогой и "в основном эффективный".

Если у вас очень дорогой продукт, он может потребовать более агрессивных (дорогих) решений. Все эти решения включают одну из двух вещей:

  • Аутентификация пользователя, а не программы, или
  • Постоянная бдительность, отслеживание новых атак и реагирование с исправлениями, которые их исправляют.

Последнее очень дорого и никогда не заканчивается. Убедитесь, что оно того стоит.

Некоторые другие полезные обсуждения:


РЕДАКТИРОВАТЬ Я хотел бы отметить одну вещь в моем упоминании о "общий секрет по SSL". Помните, что если вы не проверите сертификат, вы подвергаетесь очень легким атакам "человек посередине". Легко доступные прокси, такие как Чарльз, могут сделать это. Лучший способ - убедиться, что возвращаемый сертификат SSL подписан вашим корневым сертификатом, а не просто "любым доверенным сертификатом". Вы можете перенастроить сертификаты, которым доверяет ваше приложение, с помощью SecTrustSetAnchorCertificates(), iOS5:PTL описывает эту технику в главе 11 (стр. 221). Я также обернул это в библиотеку под названием https://github.com/rnapier/RNPinnedCertValidator.

Другим хорошим уровнем является реализация системы "вызов-ответ", в которой сервер проверяет подлинность того, что клиент имеет общий секрет, даже не передавая его по проводам. Статья в Википедии, посвященная проверке подлинности с вызовом, содержит хорошее объяснение алгоритма.

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