Hallo zusammen!
Ich bin dabei meine erste Android-App zu entwickeln und mache mir gerade Gedanken über die Kommunikation mit einer extern gehosteten Datenbank (MySQL). Ich habe im Internet bereits diverse Beiträge gefunden (u.a. in diesem schönen Forum), in denen propagiert wird, nicht direkt auf die Datenbank zuzugreifen (z.B. mit Hilfe von JDBC), sondern mit Hilfe eines Webservices, z.B. auf Basis von PHP. Diese wäre nicht das Problem. Mir stellt sich nun viel mehr die Frage, wie ich diese Kommunikation absichern kann. Zum einen könnte ich die Requests ausschließlich über SSL annehmen. Somit ist zumindest der Weg zwischen dem Mobilgerät und dem Server "sicher". Aber wie erreiche ich es, dass nicht beliebig Daten angenommen bzw. abgerufen werden können?
Anders ausgedrückt: Wenn jemand die App reverse engineerd (und das ist nun leider nicht sehr schwer), wie verhindere ich den Missbrauch? Wenn die App (jetzt mal ganz simpel gesprochen) per Requests like https://webservice.domain.com/getData.php?id=1 sich zum Beispiel Daten holt, wie verhindere ich, dass eine andere App oder die Person, welche das Reengineering betreibt, ebenfalls Daten abruft (z.B. durch einfache Eingabe im Browser)? Ich möchte ja auch die Daten des Nutzers vor dem Zugriff durch Dritte schützen.
Bisher ist mir nur folgendes eingefallen:
Obwohl anfangs nicht gewünscht bzw. gewollt, muss der Nutzer sich registrieren. Dabei werden neben der Benutzer-ID, dem Benutzernamen und dem Kennwort auch ein eindeutiger Schlüssel (Salt) generiert. Bei der Kommunikation mit dem Server wird dann nicht nur der User, sondern auch der Schlüssel übertragen. Nur wenn beides "passt", wird der Datensatz bzw. die Anfrage akzeptiert.
Aber auch das hat Nachteile... denn auch die Person, die an die Daten gelangen will, könnte sich einen Account einrichten und den Schlüssel aus der App auslesen.
Was ratet ihr mir? Übersehe ich etwas Entscheidendes?
Vielen Dank für eure Hilfe!