Борьба с мошенничеством и злоупотреблениями

По мере роста популярности вашего приложения оно может привлекать нежелательное внимание злоумышленников, которые могут захотеть использовать его в своих целях. В этой статье описаны рекомендации, которые помогут предотвратить подобные атаки на вашу систему интеграции платежей и уменьшить последствия злоупотреблений в вашем приложении.

Перенесите конфиденциальную логику на бэкэнд.

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

Например, в онлайн-шахматной игре следует проверять все ходы на стороне сервера, а не полагаться на то, что фронтенд всегда отправляет допустимые ходы.

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

Перед предоставлением прав необходимо проверить покупки.

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

  1. Отправьте соответствующий purchaseToken в свой бэкэнд. Это означает, что вы должны хранить запись обо всех значениях purchaseToken для всех покупок.
  2. Убедитесь, что значение purchaseToken для текущей покупки не совпадает ни с одним из предыдущих значений purchaseToken . purchaseToken является глобально уникальным, поэтому вы можете безопасно использовать его в качестве первичного ключа в вашей базе данных.
  3. Используйте конечные точки Purchases.products:get или Purchases.subscriptionsv2:get в API разработчиков Google Play, чтобы проверить в Google, является ли покупка законной.
  4. Если покупка совершена законно и ранее не использовалась, вы можете смело предоставить право на получение внутриигрового предмета или подписки.
  5. Для подписок, если linkedPurchaseToken задан в Purchases.subscriptionsv2:get , следует также удалить linkedPurchaseToken из базы данных и отозвать предоставленные linkedPurchaseToken права, чтобы исключить возможность совершения одной и той же покупки несколькими пользователями.
  6. Предоставлять права на получение бонусов следует только тогда, когда статус покупки — PURCHASED , и необходимо корректно обрабатывать покупки, находящиеся в состоянии « PENDING ». В случае резкого увеличения количества CANCELED покупок, вы можете предоставлять права на получение бонусов, когда покупка все еще находится в состоянии PENDING . Дополнительную информацию можно найти в разделе «Обработка ожидающих транзакций» .
  7. После предоставления права на покупку, если вы хотите использовать и подтвердить покупку, используйте 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, обязательно действуйте быстро и решительно. Для получения более подробной информации см. страницу « Часто задаваемые вопросы об авторском праве» в Центре помощи по вопросам авторского права.