Как предотвратить компрометацию покупки в приложении?
После успешной покупки я сохраняю квитанцию + идентификатор транзакции в NSUserDefaults
, Та же информация отправляется на сервер для ведения записи.
Позже (по требованию), когда пользователь захочет загрузить контент с моего собственного сервера, мое приложение отправит квитанцию + идентификатор транзакции на сервер. Он найдет сохраненную квитанцию по идентификатору транзакции, отправленную из приложения, проверит и сохраненные, и новые квитанции в Apple. Если некоторые ключи совпадают, предоставьте загружаемый контент.
Тем не менее, в настоящее время это не трудно овладеть NSUserDefaults
и извлеките квитанцию + идентификатор транзакции. Даже если я размещу информацию в цепочке для ключей, можно получить квитанцию из интернет-соединения.
Теперь, если у кого-то будет квитанция + TransactionsID, можно отправить запрос на мой сервер и получить контент с любого ПК. Как я могу исправить эту логику, не используя криптографию?
1 ответ
Хотя вы можете исправлять свою логику, чтобы ее было сложнее взломать, если вам нужна реальная защита, вам нужна какая-то криптография. Вам не нужно применять это явно - что-то столь же распространенное, как переключение с HTTP на HTTPS, часто помогает.
Три места, где вам нужно защитить ваши конфиденциальные данные, находятся на устройстве, на сервере и в пути.
Чтобы защитить данные на устройстве, храните их в связке ключей: в конце концов, хранение небольших порций конфиденциальных данных является основной целью добавления связки ключей в массив возможностей хранения на iOS.
Защита сервера - это большая тема, которая обсуждалась в многочисленных онлайн- и оффлайн-публикациях; для целей этого ответа я предполагаю, что ваш сервер надежно защищен.
Осталось защитить ваши данные при передаче между устройством и сервером, а также между вашим сервером и сервером Apple. Вы можете использовать HTTPS для достижения защиты на транспортном уровне.
Обратите внимание, что добавление всех этих уровней защиты не делает ваши данные абсолютно безопасными: организация с большим количеством времени и ресурсов (например, правительство недружественной страны) может потенциально обнаружить ваши ключи - например, путем разборки физического устройства и проверка данных, поступающих из процессора с помощью логического анализатора. Тем не менее, цель этого упражнения не в том, чтобы добиться абсолютной защиты, а в том, чтобы чрезмерно дорого нарушить вашу схему безопасности. Для этого комбинация Keychain и HTTPS должна достичь цели, заключающейся в том, чтобы нарушить защиту дороже, чем покупать ваш контент на законных основаниях.