Как предотвратить компрометацию покупки в приложении?

После успешной покупки я сохраняю квитанцию ​​+ идентификатор транзакции в NSUserDefaults, Та же информация отправляется на сервер для ведения записи.

Позже (по требованию), когда пользователь захочет загрузить контент с моего собственного сервера, мое приложение отправит квитанцию ​​+ идентификатор транзакции на сервер. Он найдет сохраненную квитанцию ​​по идентификатору транзакции, отправленную из приложения, проверит и сохраненные, и новые квитанции в Apple. Если некоторые ключи совпадают, предоставьте загружаемый контент.

Тем не менее, в настоящее время это не трудно овладеть NSUserDefaults и извлеките квитанцию ​​+ идентификатор транзакции. Даже если я размещу информацию в цепочке для ключей, можно получить квитанцию ​​из интернет-соединения.

Теперь, если у кого-то будет квитанция + TransactionsID, можно отправить запрос на мой сервер и получить контент с любого ПК. Как я могу исправить эту логику, не используя криптографию?

1 ответ

Решение

Хотя вы можете исправлять свою логику, чтобы ее было сложнее взломать, если вам нужна реальная защита, вам нужна какая-то криптография. Вам не нужно применять это явно - что-то столь же распространенное, как переключение с HTTP на HTTPS, часто помогает.

Три места, где вам нужно защитить ваши конфиденциальные данные, находятся на устройстве, на сервере и в пути.

Чтобы защитить данные на устройстве, храните их в связке ключей: в конце концов, хранение небольших порций конфиденциальных данных является основной целью добавления связки ключей в массив возможностей хранения на iOS.

Защита сервера - это большая тема, которая обсуждалась в многочисленных онлайн- и оффлайн-публикациях; для целей этого ответа я предполагаю, что ваш сервер надежно защищен.

Осталось защитить ваши данные при передаче между устройством и сервером, а также между вашим сервером и сервером Apple. Вы можете использовать HTTPS для достижения защиты на транспортном уровне.

Обратите внимание, что добавление всех этих уровней защиты не делает ваши данные абсолютно безопасными: организация с большим количеством времени и ресурсов (например, правительство недружественной страны) может потенциально обнаружить ваши ключи - например, путем разборки физического устройства и проверка данных, поступающих из процессора с помощью логического анализатора. Тем не менее, цель этого упражнения не в том, чтобы добиться абсолютной защиты, а в том, чтобы чрезмерно дорого нарушить вашу схему безопасности. Для этого комбинация Keychain и HTTPS должна достичь цели, заключающейся в том, чтобы нарушить защиту дороже, чем покупать ваш контент на законных основаниях.

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