Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

不正行為や不正使用に対処する

アプリの人気が高まるにつれて、悪意のあるユーザーの目に留まり、アプリを不正使用される可能性が高まります。このトピックでは、課金の統合に対する攻撃を防止し、アプリの不正使用による影響を低減するのに役立つ推奨事項について説明します。

機密性の高いロジックをバックエンドに移動する

機密性の高いデータとロジックは、アプリの設計で許容できる限り、自分で管理するバックエンド サーバーに移動します。フロントエンド デバイス上にあるデータとロジックが多いほど、変更や改ざんといった攻撃を受ける可能性が高まります。

たとえばオンラインのチェスゲームでは、フロントエンドから送信される駒の動きを信用せずに、すべての動きをバックエンドで検証する必要があります。

さらに、脆弱性やセキュリティ上の問題が見つかった場合、システムの設計によっては、デバッグ、修正、アップデートのリリースをフロントエンドよりもバックエンドで行うほうが簡単な場合があります。

利用権を付与する前に購入を確認する

機密性の高いデータとロジックをバックエンドで処理する必要がある特別なケースの 1 つに、購入の確認があります。ユーザーによる購入の後、以下の操作を行う必要があります。

  1. 対応する purchaseToken をバックエンドに送信します。つまり、すべての購入ですべての purchaseToken 値の記録を保持する必要があります。
  2. 現在の購入の purchaseToken 値が以前のどの purchaseToken 値とも一致しないことを確認します。purchaseToken はグローバルに一意であるため、この値はデータベースの主キーとして安全に使用できます。
  3. Google Play Developer API で Purchases.products:get エンドポイントまたは Purchases.subscriptions:get エンドポイントを使用して、購入が正当であることを Google に確認します。
  4. 購入が正当であり、過去に使用されたことがない場合は、アプリ内アイテムや定期購入に対する利用権を安全に付与できます。
  5. 定期購入に関しては、Purchases.subscriptions:getlinkedPurchaseToken が設定された場合、データベースから linkedPurchaseToken を削除し、linkedPurchaseToken に付与されている利用権を取り消して、複数のユーザーによる同じ購入ができないようにする必要もあります。

ロックフリー コンテンツを保護する

悪意のあるユーザーによってロックフリー コンテンツが再配信されるのを防ぐために、APK ファイル内にバンドルしないようにします。代わりに、次のいずれかを行います。

  • コンテンツ フィードなどのリアルタイム サービスを使ってコンテンツを配信する。 リアルタイム サービスを利用してコンテンツを配信することで、コンテンツを最新の状態に維持することもできます。
  • コンテンツの配信にリモート サーバーを使用する。

リモート サーバーやリアルタイム サービスからコンテンツを配信すると、ロックフリー コンテンツをデバイスのメモリや SD カードに保存できます。SD カードに保存する場合には、必ずコンテンツを暗号化し、デバイス固有の暗号鍵を使用してください。

取り消し済みの購入を検出して処理する

「取り消し済みの購入」とは、キャンセル、取り消し、またはチャージバックが行われた購入です。購入が取り消される前に、アプリ内アイテムやその他のコンテンツをユーザーに付与していた場合は、Voided Purchases API を使用して、購入が取り消された理由と、回収可能な関連コンテンツを取得できます。

アプリ内アイテムの購入と定期購入は、以下のような、さまざまな理由で取り消されることがあります。

  • ユーザー、デベロッパー、Google のいずれかによって購入がキャンセルされた。定期購入の場合、これは、定期購入の解約ではなく、定期購入の購入そのものをキャンセルしたことを表します。
  • 購入がチャージバックされた。
  • アプリ デベロッパーがユーザーの注文のキャンセルまたは払い戻しを行い、コンソールで「取り消し」オプションを有効にした。

行動指針は、購入の取り消しの理由に基づき、ユーザーの以前の行動データを考慮して決定します。そこで、次のうち 1 つ以上を実装することをおすすめします。

  • 回収を行う: 購入が取り消された場合、未使用のアイテムを回収して、それらが購入されなかったようにすることができます。たとえば、ゲーム内通貨の購入が取り消された場合、ユーザーにすでに付与された通貨を回収できます。ユーザーがすでに通貨を使ってしまった場合は、通貨の残高をマイナスに設定し、通貨の残高がプラスになるまでアプリのアクティビティと今後の購入を制限することを検討してください。
  • 複数回の違反警告を実装する: 違反が初めてのユーザーに対しては控えめな措置(アプリ内での警告の表示など)に留め、違反を繰り返すユーザーに対しては厳しい措置を取ることを検討してください。
  • 購入を一時的に無効にする: 複数回の違反警告を実装する場合と同様に、購入が取り消された理由を詳しく調査できるようになるまで、購入を取り消したユーザーの購入を無効にすることを検討します。
  • アプリへのアクセスを一時的または永続的に拒否する: 悪意のあるアクティビティが繰り返し行われる極端なケースでは、アプリへのアクセスを一時的または永続的に拒否することを検討してください。
  • Voided Purchases API を頻繁に呼び出す: 取り消し済みの購入が 1 つ以上検出された場合、Voided Purchases API を頻繁に呼び出して、ユーザーが購入アイテムを消費する前に回収することを検討してください。Voided Purchases API の割り当てについて詳しくは、Voided Purchases API のドキュメントをご覧ください。

不正行為が行われる前に Google が検出できるようにする

不正行為の中には、悪意のあるユーザーが複数の Google アカウントとアプリ内アカウントを作成して、自分のアクティビティを隠すというものがあります。

BillingFlowParams のビルダーで setObfuscatedAccountId メソッドと setObfuscatedProfileId メソッドを使用すると、Google が Google アカウントをアプリ内アカウントにマッピングできるようになります。

Google はこのデータを使用して不審な動作を検出し、一部の不正取引を完了前にブロックします。

商標と著作権の侵害に対する措置

リモート サーバーでコンテンツの配信や管理を行っている場合、ユーザーがコンテンツにアクセスするたびに、アプリでロックフリー コンテンツの購入ステータスを確認するようにします。これにより、必要に応じて利用を取り消し、侵害行為を最小限に抑えることができます。自分のコンテンツが Google Play 上で再配信されているのを見つけた場合、速やかに断固たる措置を講じる必要があります。詳しくは、著作権ヘルプセンターの著作権に関するよくある質問をご覧ください。