Überprüfung der Android-In-App-Abrechnung

8

Wenn ich die Verifizierung auf einen Remote-Server verlagern möchte, denke ich, dass der Prozess etwa so aussehen wird:

%Vor%

Wenn ich es richtig verstehe, soll die Nonce die Replay-Attacken-Schwachstelle reduzieren und die Verifizierung soll die Spoofing-Schwachstelle reduzieren. Der Grund dafür, dass die Dokumente die Sicherheitsverarbeitung auslagern, ist, dass der Verifizierungsschritt Zugriff auf den öffentlichen Schlüssel meines öffentlichen Android Market-Publishers erfordert und das Ziel des Remoteservers darin besteht, dass dieser Schlüssel nicht in meinen Code eingeschlossen / berechnet werden muss.

>

Erste Frage, gibt es einen Sicherheitsgrund für den Remote-Server, um die Nonce-Erzeugung / Prüfung durchzuführen? Wenn der Bestätigungsschritt korrekt ausgeführt wurde, würden wir vom entfernten Server herausfinden, ob die Nachricht gefälscht wurde. So scheint es mir, dass das Nonce nur da ist, um jemanden zu finden, der das IN_APP_NOTIFY erneut sendet.

Zweite Frage, warum ist es wichtig, ob unser öffentlicher Schlüssel eine wörtliche Zeichenfolge ist? Die Dokumentation sagt, "Sie möchten es einem Hacker oder böswilligen Benutzer nicht leicht machen, den öffentlichen Schlüssel durch einen anderen Schlüssel zu ersetzen." Mir ist nicht klar, wie jemand meine App ausnutzen könnte, selbst wenn sie die Binärdatei so bearbeiten könnten, dass sie einen böswilligen öffentlichen Schlüssel enthält, ohne die App verlassen zu müssen.

Dritte Frage, habe ich nicht alle die gleichen Probleme, die Verifizierung von meinem Remote-Server zu überprüfen (z. B. öffentlichen Schlüssel auf meinem Remote-Server in der Anwendung speichern)?

Vierte Frage, ist all diese zusätzliche Sicherheit für nichts, wenn ich die Ergebnisse dieser Kaufbestätigung am Telefon speichern möchte (dh ich möchte nicht den Kaufstatus der entsperrten Inhalte überprüfen müssen, wenn ein Benutzer darauf zugreift der Inhalt)?

    
lwiseman 19.12.2011, 09:20
quelle

1 Antwort

10

Erste Frage, gibt es einen Sicherheitsgrund für den Remote-Server, um die Nonce-Erzeugung / Prüfung durchzuführen?

Ja, der Server sollte die Nonce generieren und die Überprüfung durchführen. In der Regel sollte alles, was sicherheitsrelevant ist, fast immer auf dem Server erfolgen. Ein Nonce ist eine "Nummer, die nur einmal verwendet wird". Das richtige für den Server ist also:

  1. erzeugt und speichert eine Nonce.
  2. empfange eine Antwort.
    • Wenn die Antwort eine gespeicherte Nonce enthält, überprüfen Sie die Signatur und verarbeiten Sie sie. Löse die Nichte.
    • Wenn die Antwort eine ungesicherte Nonce enthält, handelt es sich höchstwahrscheinlich um eine fabrizierte / replizierte, also verwerfen.

Zweite Frage, warum ist es wichtig, ob unser öffentlicher Schlüssel eine Literalzeichenfolge ist?

Etwas, wenn Sie Sicherheitsüberprüfungen für die Anwendung durchführen, völlig irrelevant, wenn Sie Ihre Arbeit auf einem Server ausführen (wie Sie sollten).

Wenn Sie Sicherheit in der Anwendung ausführen, kann die Anwendung gehackt werden, um die Sicherheit zu umgehen. Eine Technik besteht darin, den öffentlichen Schlüssel zu ändern, was einfacher ist, wenn er als einzelne Zeichenfolge gespeichert wird.

Dritte Frage, habe ich nicht alle die gleichen Probleme, die Verifizierung von meinem Remote-Server zu verifizieren (z. B. öffentlichen Schlüssel auf meinem Remote-Server in der Anwendung zu speichern)?

Nein, wirst du nicht. Niemand kann auf den Code des Servers zugreifen / ihn ändern. Zumindest so "einfach" wie die Dose in der Anwendung.

Vierte Frage, ist all diese zusätzliche Sicherheit für nichts, wenn ich die Ergebnisse dieser Kaufbestätigung am Telefon speichern möchte (dh ich möchte nicht den Kaufstatus des freigeschalteten Inhalts überprüfen müssen, wenn ein Benutzer greift auf den Inhalt zu)?

Nun, es kommt darauf an.

Die "sicherste" Möglichkeit zur Implementierung von In-App-Käufen mit einem Server beinhaltet:

  • Sie speichern Ihren "käuflichen" Inhalt auf dem Server. Wenn ein Benutzer es kauft, lädt man es in die Anwendung und speichert es auf eine Weise, die auf ein anderes Telefon schwer zu "kopieren" ist.
  • vom Server, senden Sie nur Inhalte, wenn der Verifizierungsprozess im Server korrekt durchgeführt wurde.
  • Wenn Sie in der Anwendung keinen "gespeicherten" Inhalt finden, führen Sie einen Vorgang "Transaktionen wiederherstellen" aus und laden Sie dann alles, was Sie benötigen, vom Server herunter.
  • Die In-App-Käufe von google play sind nicht darauf ausgelegt, Inhalte einfach bereitzustellen, sondern sollen Einkäufe auf einer zentralisierten Website und damit für den Nutzer einfacher machen. Wir Entwickler haben eine Menge Arbeit, um es zu benutzen.
Atridas 03.04.2012, 13:35
quelle