2012-03-13 20 views
1

私はアプリ内課金のデモ作業を得たが、クラスのコメントが言うように、リモートサーバー上のSecurity.javaファイルを実装する方法を確認していないました:アプリ内課金、サーバーでのSecurity.javaの実装方法(?アプリエンジン)

/** 
* Security-related methods. For a secure implementation, all of this code 
* should be implemented on a server that communicates with the 
* application on the device. For the sake of simplicity and clarity of this 
* example, this code is included here and is executed on the device. If you 
* must verify the purchases on the phone, you should obfuscate this code to 
* make it harder for an attacker to replace the code with stubs that treat all 
* purchases as verified. 
*/ 
public class Security { 
    ... 

理想的には誰かがすでにアプリエンジン実装(java?)をまとめている可能性があります。これらの方法のどれがサーバー上に移動する必要があるのか​​、クライアント上にとどまる必要があるのか​​はわかりません。

たとえば、「verifyPurchase()」メソッドがサーバー側で動作する必要があることは明らかです。しかし、多くの請求依頼には "nonce"が必要であり、そのための簿記はクライアントコード(BillingService.java呼び出し)とSecurity.verifyPurchase()メソッド(おそらくサーバーコード)の両方に存在するように見えます。

おかげ

答えて

3

Googleのコードのいくつかの例がありますが、私はほとんどががPHPを使用していると思います。 Javaには何かがあるかもしれません。一言で言えば、それを正しくやりたいのなら、ほとんどすべてがサーバー上になければなりません。サーバー上でナンスを生成し、それをデータストアに保存する必要があります。新しいナンスを生成するときは、データストア内で検索することによって(ナンスのプロパティを保証するため)、ナンスがまだ使用されていないことを確認する必要があります。署名検証リクエストが来たら、署名を確認して、それが本当にあなたが生成したものであることを保証するためにnonceが存在するかどうかを確認します。

Recepie: 'Security`クラスを取得し、HTTPパラメータから入力を取得させます。フィールドに保存され、データストアに格納されます。

ところで、これに関するGoogle I/Oの話、App Engineのいくつかの例があります。私は彼らが実際のコードをリリースしたとは思わない。ここにリンクがあります:http://www.google.com/events/io/2011/sessions/evading-pirates-and-stopping-vampires-using-license-verification-library-in-app-billing-and-app-engine.html

+0

ありがとうございました。乱数を生成してデータストアに格納し、要求元のクライアントに返します。後でそのクライアントは検証要求を行います。私たちは、データストア内の提供されたnonceの存在をチェックします。存在する場合、それは合法です。検証チェックの終わりに、そのノンスをデータストアから削除する必要があります。しかし、この設定では誰かがランダムなノンスを試すことができます(恐らく実際には小さなチャンス) - ノンスをデータストア内のデバイスシグネチャに結びつける必要があるので、ノンスが要求側のデバイスシグネチャと一致するかどうかを調べることもできます? – user291701

+0

ノンスの目的は、リプレイ攻撃を避けることです。つまり、誰かが有効な署名入りの応答をキャプチャした場合、何度も何度も送信し、有効であると認識されます。ナンスを使用すると、番号は一度しか使用されないため、ナンスを使用することはできません。ノンスは署名されたメッセージの一部であるため、実際にランダムなノンスを試すことはできません。彼らは秘密鍵を持っていないので、有効な署名を生成することはできず、取得したものを再送(再生)するだけです。それはどんなデバイスが意図されているかは実際問題ではありません。したがって、いいえ、デバイス情報をナンスと一緒に保存する必要はありません。 –

+0

よかった、説明のおかげで! – user291701

関連する問題