Google Play стремится обеспечить безопасность как пользователей, так и разработчиков. Мы понимаем, что создание успешного бизнеса в сфере мобильных приложений зависит от надежной платформы — той, которая гарантирует возврат инвестиций, активно защищая от злоумышленников.
В этом документе изложены рекомендации по предотвращению атак на вашу интеграцию с платежной системой и снижению последствий злоупотреблений в вашем приложении.
Улучшите свою защиту
Следующие API и инструменты могут снизить риски в вашем приложении:
- API для аннулированных покупок : Отзыв доступа к аннулированным заказам.
- Замаскированный идентификатор учетной записи : помогает обнаружить случаи, когда несколько устройств совершают покупки с одной и той же учетной записи в течение короткого периода времени.
- Использование бэкэнда : такие инструменты, как Purchases.products:consume, переносят бизнес-логику в ваши защищенные бэкэнды, предотвращая несанкционированное вмешательство на стороне клиента. В дополнение к использованию этих API платформы, примените следующие лучшие практики для дополнительной защиты ваших интеграций от несанкционированного доступа.
Предотвращение подмены местоположения
Google Play предоставляет встроенные средства защиты, предотвращающие использование злоумышленниками ложных данных о местоположении для эксплуатации региональных различий в валютах (так называемая подмена местоположения), злоупотребление рекламными акциями и бонусами по подписке, а также попытки мошенничества с подарочными картами.
Перенесите конфиденциальную логику на бэкэнд.
Насколько это позволяет дизайн вашего приложения, переместите конфиденциальные данные и логику на контролируемый вами бэкэнд-сервер. Чем больше данных и логики находится на фронтенде, тем более уязвимым он становится для модификации или несанкционированного доступа.
Например, в онлайн-шахматной игре следует проверять все ходы на стороне сервера, а не полагаться на то, что фронтенд всегда отправляет допустимые ходы.
Кроме того, если вы обнаружите уязвимости или проблемы безопасности, в зависимости от архитектуры вашей системы, отладка, исправление и развертывание обновлений могут оказаться проще на бэкэнде, чем на фронтенде.
Перед предоставлением прав необходимо проверить покупки.
Особый случай обработки конфиденциальных данных и логики, требующий обработки на бэкэнде, — это проверка и подтверждение покупки. После совершения покупки пользователем необходимо выполнить следующие действия:
- Отправьте соответствующий purchaseToken в свой бэкэнд. Это означает, что вы должны хранить запись обо всех значениях purchaseToken для всех покупок.
- Убедитесь, что значение purchaseToken для текущей покупки не совпадает ни с одним из предыдущих значений purchaseToken. Значение purchaseToken является глобально уникальным, поэтому вы можете безопасно использовать его в качестве первичного ключа в вашей базе данных.
- Используйте конечные точки Purchases.products:get или Purchases.subscriptionsv2:get в API разработчиков Google Play, чтобы проверить в Google, является ли покупка законной.
- Если покупка совершена законно и ранее не использовалась, вы можете смело предоставить право на получение внутриигрового предмета или подписки.
- Для подписок, если параметр linkedPurchaseToken задан в Purchases.subscriptionsv2:get, следует также удалить linkedPurchaseToken из базы данных и отозвать предоставленные ему права, чтобы исключить возможность совершения одной и той же покупки несколькими пользователями.
- Предоставлять права на получение бонусов следует только тогда, когда статус покупки — «ПОКУПКА», и необходимо корректно обрабатывать покупки, находящиеся в статусе «ОЖИДАЮЩИЕСЯ». В случае резкого увеличения количества отмененных покупок, вы можете предоставлять права на получение бонусов, когда покупка все еще находится в статусе «ОЖИДАЮЩИЕСЯ». Дополнительную информацию можно найти в разделе «Обработка ожидающих транзакций» .
После предоставления права на покупку, если вы хотите использовать и подтвердить покупку, используйте API Play Developer Purchases.products:consume на вашем защищенном бэкэнд-сервере. Чтобы подтвердить покупку нерасходуемого продукта или подписки, вызовите соответствующую конечную точку API Play Developer: Purchases.products:acknowledge или Purchases.subscriptions:acknowledge на вашем защищенном бэкэнд-сервере. Подтверждение необходимо, поскольку оно уведомляет Google Play о том, что пользователю предоставлено право на покупку. Подтверждать покупку следует сразу после предоставления права на покупку.
Обратите внимание, что хотя вы можете подтвердить или обработать покупку на стороне клиента через ваше приложение, API на стороне сервера обеспечивают дополнительную защиту от таких проблем, как плохое сетевое соединение и вредоносная активность. Например, представьте, что пользователь купил товар в вашем приложении, но потерял сетевое соединение во время проверки покупки. Без подтверждения со стороны сервера ему, возможно, потребуется снова войти в приложение, чтобы завершить процесс подтверждения. В противном случае, если пользователь не войдет в систему в течение трех дней, покупка будет автоматически возвращена из-за отсутствия подтверждения. Подтверждение со стороны сервера предотвращает этот сценарий, отправляя подтверждение, как только Google Play уведомит сервер о том, что покупка действительна.
Для получения дополнительной информации о подтверждении и использовании покупок см. раздел «Обработка покупок» .
Защита вашего разблокированного контента
Чтобы предотвратить распространение разблокированного контента злоумышленниками, не включайте его в APK-файл. Вместо этого сделайте одно из следующих действий:
- Используйте сервис доставки контента в режиме реального времени, например, ленту контента. Доставка контента через такой сервис также позволяет поддерживать его актуальность.
- Для доставки контента используйте удалённый сервер. При доставке контента с удалённого сервера или из сервиса реального времени вы можете хранить разблокированный контент в памяти устройства или на SD-карте устройства. Если вы храните контент на SD-карте, обязательно зашифруйте его и используйте ключ шифрования, специфичный для вашего устройства.
Выявление и обработка аннулированных покупок.
Аннулированные покупки — это покупки, которые были отменены, аннулированы или возвращены. Если аннулированная покупка ранее предоставляла пользователю внутриигровые предметы или другой контент, вы можете использовать API аннулированных покупок, чтобы получить причину аннулирования покупки, а также любой связанный с ней контент, который вы можете вернуть.
Покупки внутриигровых предметов и подписок могут быть аннулированы по различным причинам, в том числе по следующим:
- Покупка отменяется либо пользователем, либо разработчиком, либо Google (включая неподтвержденные автоматически отмененные покупки). В случае подписок следует отметить, что речь идет об отмене покупки подписки, а не об отмене самой подписки .
- Покупка отменяется.
Разработчик приложения отменяет или возвращает деньги за заказ пользователя и отмечает опцию «отменить» в консоли. Исходя из причины отмены покупки и с учетом предыдущих данных о поведении пользователя, можно принять решение о дальнейших действиях. Мы рекомендуем реализовать один или несколько из следующих вариантов:
Возврат средств: При аннулировании покупки вы можете вернуть неиспользованные предметы, как если бы они никогда не были куплены. Например, если покупка внутриигровой валюты была аннулирована, вы можете вернуть валюту, которая уже была предоставлена пользователю. В случае, если пользователь уже потратил валюту, рассмотрите возможность установки отрицательного баланса валюты и ограничения активности приложения и будущих покупок до тех пор, пока баланс валюты не станет положительным.
Внедрение системы повторных нарушений: для нарушителей, совершивших нарушение впервые, следует рассмотреть менее радикальные меры, например, отображение предупреждений в приложении. Для нарушителей, совершивших повторные нарушения, следует рассмотреть более строгие меры.
Временно отключите покупки: аналогично реализации системы множественных предупреждений, рассмотрите возможность отключения покупок для пользователей с аннулированными заказами до тех пор, пока вы не сможете более тщательно выяснить причины аннулирования покупок.
Временно или навсегда заблокируйте доступ к вашему приложению: в крайних случаях, когда вредоносная активность повторяется, рассмотрите возможность временного или постоянного запрета доступа к вашему приложению.
Регулярно обращайтесь к API аннулированных покупок: если вы обнаружите одну или несколько аннулированных покупок, рассмотрите возможность более частого обращения к API аннулированных покупок, чтобы вернуть средства до того, как пользователь сможет их совершить. Дополнительную информацию о квотах API аннулированных покупок можно найти в документации по API аннулированных покупок .
Помогите Google выявлять мошенничество до того, как оно произойдет.
Некоторые виды мошенничества связаны с тем, что злоумышленники создают множество учетных записей Google и внутри приложений, чтобы скрыть свою активность.
Используйте методы setObfuscatedAccountId и setObfuscatedProfileId в конструкторе BillingFlowParams , чтобы помочь Google сопоставить учетные записи Google с учетными записями внутри приложений.
Google использует эти данные для выявления подозрительного поведения и блокировки некоторых видов мошеннических транзакций до их завершения.
Принятие мер против нарушения товарных знаков и авторских прав
Если вы используете удалённый сервер для доставки или управления контентом, настройте ваше приложение на проверку состояния покупки разблокированного контента каждый раз, когда пользователь получает к нему доступ. Это позволит вам при необходимости отменять использование и минимизировать пиратство. Если вы видите, что ваш контент распространяется в Google Play, обязательно действуйте быстро и решительно. Для получения более подробной информации см. страницу « Часто задаваемые вопросы об авторском праве» в Центре помощи по вопросам авторского права.