Подтвердить что ты не робот

Что использовать в качестве полезной нагрузки разработчика в API-интерфейсах Google In-App Billing?

Учебный класс для продажи продуктов In-app в Android предлагает использовать полезную нагрузку при оформлении запроса на покупку:

Пятый аргумент содержит "полезную строку разработчика", которую вы можете использовать для отправки дополнительной информации о заказе (это может быть пустая строка). Как правило, это используется для передачи в токенах строк, которые однозначно идентифицируют этот запрос на покупку. Если вы укажете строковое значение, Google Play вернет эту строку вместе с ответом на покупку. Впоследствии, когда вы делаете запросы об этой покупке, Google Play возвращает эту строку вместе с деталями покупки.

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

Реализация страницы покупки IAB имеет аналогичную рекомендацию с дополнительным предложением о том, что значение полезной нагрузки должно быть проверено на вашем собственном защищенном сервере:

Рекомендация по безопасности:. Когда вы отправляете запрос на покупку, создайте токен String, который однозначно идентифицирует этот запрос на покупку и включает этот токен в DeveloperPayload. Вы можете использовать произвольно сгенерированную строку в качестве токена. Когда вы получите ответ на покупку от Google Play, обязательно проверьте возвращенную подпись данных, orderId и строку разработчикаPayload. Для дополнительной безопасности вы должны выполнить проверку на своем собственном безопасном сервере. Убедитесь, что orderId является уникальным значением, которое вы ранее не обрабатывали, а строка разработчикаPayload соответствует маркеру, который вы отправили ранее с запросом на покупку.

Если посмотреть на исходный код приложения Trivial Drive, который Google использует для демонстрации API, я нахожу это предупреждение:

* WARNING: Locally generating a random string when starting a purchase and
* verifying it here might seem like a good approach, but this will fail in the
* case where the user purchases an item on one device and then uses your app on
* a different device, because on the other device you will not have access to the
* random string you originally generated.
*
* So a good developer payload has these characteristics:
*
* 1. If two different users purchase an item, the payload is different between them,
*    so that one user purchase can't be replayed to another user.
*
* 2. The payload must be such that you can verify it even when the app wasn't the
*    one who initiated the purchase flow (so that items purchased by the user on
*    one device work on other devices owned by the user).
*
* Using your own server to store and verify developer payloads across app
* installations is recommended.

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

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

4b9b3361

Ответ 1

Мои знания при покупке InApp из старой библиотеки v2. Я не работал с новейшим v3. Однако, надеюсь, я по-прежнему буду полезен.

Да использование полезной нагрузки разработчика в качестве добавленной функции безопасности определенно поможет, однако, нужно ли вам или нет, вероятно, более субъективно, чем объективная дилемма. В моем случае у моего клиента уже был сервер в миксе, так как клиенты загружают 200 МБ файлов после покупки inapp. Мы использовали полезную нагрузку разработчика для хранения информации о файле, авторизованном для загрузки. Эта информация имела решающее значение при описании приложения, как обрабатывать загруженные файлы.

Мы по-прежнему предоставляли дополнительную защиту путем переопределения локального метода verifyPurchase() при вызове сервера. IE, поставляя собственный собственный счет для проверки. Выполнение этого локально не очень безопасно.

Что касается вашей ситуации, я говорю, что это вопрос риска и стоимости. Что риск взлома вашего приложения и клиентов в обход покупок, а также стоимость внедрения дополнительной безопасности. Если ваше приложение загружается более 100 000 раз, у вас есть достаточный риск. Если более 1 миллиона раз, то существует высокий риск. Если всего несколько тысяч, то пиратство, вероятно, будет игнорировать ваше приложение. Если вы выберете дополнительную безопасность, вам нужно запустить сервер, а затем добавить все код и подтверждение связи, необходимые для приложения и сервера. Все это потребует времени и денег. Особенно при оплате сервера за время вашего приложения.