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

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

Перенесите чувствительную логику на ваш бэкэнд

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

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

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

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

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

  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. Если после предоставления права доступа вы хотите использовать и подтвердить покупку расходуемого продукта, используйте функцию Purchases.products:consume API Play Developer на вашем защищённом сервере. Чтобы подтвердить покупку нерасходуемого продукта или подписки, вызовите соответствующую конечную точку 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, действуйте быстро и решительно. Подробнее см. на странице «Часто задаваемые вопросы об авторском праве» в Центре поддержки авторских прав.