2013-03-03 2 views
30

Die training class for Selling In-app Products in Android schlägt eine Nutzlast zu verwenden, wenn eine Kaufanfrage machen:Was wird als Entwickler-Payload in Google In-App Billing-APIs verwendet?

Das fünfte Argument enthält eine ‚Entwickler Nutzlast‘ Zeichenfolge, die Sie zusätzliche Informationen senden zu einer Bestellung verwenden können (es kann ein leerer String sein) . In der Regel wird damit ein Zeichenfolgen-Token übergeben, das diese Bestellanforderung eindeutig identifiziert. Wenn Sie einen Zeichenfolgenwert angeben, gibt Google Play diese Zeichenfolge zusammen mit der Kaufantwort zurück. Wenn Sie anschließend Fragen zu diesem Kauf stellen, gibt Google Play diese Zeichenfolge zusammen mit den Kaufdetails zurück.

Sicherheit Empfehlung: Es ist ein gute Übung in einer Zeichenfolge zu übergeben, die Ihre Anwendung hilft den Benutzer zu identifizieren, die den Kauf getätigt, so dass Sie später überprüfen können, dass dies durch den Benutzer ein legitimer Kauf. Bei Verbrauchsartikeln können Sie eine zufällig generierte Zeichenfolge verwenden. Bei nicht konsumierbaren Elementen sollten Sie jedoch eine Zeichenfolge verwenden, die den Benutzer eindeutig identifiziert.

Die Implementing IAB Purchase page hat eine ähnliche Empfehlung, mit dem zusätzlichen Hinweis, dass die Nutzlast Wert auf Ihrem eigenen sicheren Server geprüft werden soll:

Sicherheit Empfehlung: Wenn Sie eine Kaufanfrage senden, ein erstellen String-Token, das diese Bestellanforderung eindeutig identifiziert und dieses Token in developerPayload einfügt. Sie können eine zufällig generierte Zeichenfolge als Token verwenden. Wenn Sie die Kaufantwort von Google Play erhalten, überprüfen Sie die zurückgegebene Datensignatur, die orderId und die developerPayload-Zeichenfolge. Für zusätzliche Sicherheit sollten Sie die Überprüfung auf Ihrem eigenen sicheren Server durchführen. Stellen Sie sicher, dass die orderId ein eindeutiger Wert ist, den Sie zuvor noch nicht verarbeitet haben, und dass die developerPayload-Zeichenfolge mit dem Token übereinstimmt, das Sie zuvor mit der Kaufanforderung gesendet haben.

auf dem Quellcode der Suche nach dem Trivial Drive App, die Google mit der API zu demonstrieren, finde ich diese Warnung:

* 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's 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. 

Also von all diesen Nachrichten, es wie eine schlechte Idee klingt Verwenden Sie eine Zufallszahl/Zeichenfolge für die Nutzlast. Auch nach dem Lesen der letzten Warnung klingt es nach einer schlechten Idee, die Geräte-ID als Payload zu übergeben, da sie für den gleichen Benutzer auf verschiedenen Geräten unterschiedlich sein wird. Was sollte also für die Entwickler-Payload verwendet werden?

Meine App bietet lokale Funktionen, auf die der Benutzer zugreifen kann, ohne sich bei einem Dienst anmelden zu müssen. Es gibt also kein Konzept für einen "Benutzer" und auch keine serverseitige Komponente. Die In-App-Kaufanfrage bezieht sich auf ein Upgrade, mit dem Anzeigen aus der App entfernt werden. Ist es sinnvoll, dass eine App wie diese die Payload-Funktion nutzt, oder ist es besser, eine leere Zeichenfolge dafür zu verwenden und sie anfällig für Replay-Angriffe zu machen?

+8

Warum machen sie es nicht einfach für jeden und tun was Amazon und Apple tun und bieten einen externen Quittungsvalidierungsservice an? –

+0

@MichaelWiles sie es tun, überprüfen AndroidPublisher API (https://developers.google.com/apis-explorer/#p/androidpublisher/v2/), insbesondere androidpublisher.purchases.products.get Methode – tomrozb

Antwort

14

Mein Wissen mit dem InApp-Kauf stammt aus der älteren v2-Bibliothek. Ich habe nicht mit der neuesten v3 gearbeitet. Hoffentlich kann ich aber immer noch hilfreich sein.

Ja, die Verwendung der Entwickler-Payload als zusätzliches Sicherheitsmerkmal wird definitiv helfen, aber ob Sie es wahrscheinlich sind oder nicht, ist wahrscheinlich subjektiver als ein objektives Dilemma. In meinem Fall hatte mein Kunde bereits einen Server im Mix, da die Kunden 200 MB Dateien nach einem In-App-Kauf herunterladen müssen. Wir haben die Entwickler-Payload verwendet, um Informationen über die Datei zu speichern, die zum Herunterladen autorisiert ist. Diese Informationen waren wichtig, um der App mitzuteilen, wie die heruntergeladenen Dateien verarbeitet werden.

Wir bieten noch zusätzliche Sicherheit durch Überschreiben der lokalen verifyPurchase() Methode mit einem Serveraufruf. IE, liefert unsere eigene Nonce zu überprüfen. Dies lokal zu tun ist nicht sehr sicher.

Für Ihre Situation, ich sage, es ist eine Frage von Risiko vs Kosten. Was ist das Risiko, dass Ihre App gehackt wird und Kunden die Käufe umgehen, während die Kosten für die Implementierung der zusätzlichen Sicherheit anfallen? Wenn Ihre App über 100.000 Mal heruntergeladen wird, haben Sie ein gewisses Risiko. Wenn über 1 Million mal, dann besteht ein hohes Risiko. Wenn nur ein paar tausend, dann wird Piraterie wahrscheinlich Ihre App übersehen. Wenn Sie die hinzugefügte Sicherheit auswählen, müssen Sie einen Server zum Laufen bringen und dann den gesamten für App und Server erforderlichen Code und Handshake hinzufügen. All das wird Zeit und Geld erfordern. Vor allem, wenn Sie während der Laufzeit Ihrer App einen Server bezahlen.

+0

Piraterie auf Android ziemlich weit verbreitet ist. Raubkopien meiner App waren innerhalb weniger Wochen nach der Veröffentlichung online, als es noch weniger als 1000 Benutzer gab. Nur zu deiner Information. – user3690202

Verwandte Themen