Datenbank-Kommunikation absichern

Z

Zeebo

Neues Mitglied
0
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!
 
Sind die Daten User-spezifisch? Soll z.B. ein User nur auf die Datensätze [A, B, C] Zugriff haben und ein anderer User auf [C, D, E]? Oder sind alle Daten für alle zugänglich?

Bei user-spezifischen Daten musst du bei jedem Request prüfen, ob der User rechtmässig eingeloggt ist und überhaupt auf die gewünschten Daten zugreifen darf (hat er die Daten selber erstellt? / Hat ihm jemand erlaubt, die Daten zu lesen?). Diese Überprüfung muss dann natürlich auf dem Server stattfinden und erfordert es demnach auch, dass du die verschiedenen User unterscheiden kannst. Eine Registration mit Login wäre dafür eine Variante, es gibt aber auch andere Möglichkeiten mit entsprechenden Vor- und Nachteilen. Ich habe z.B. das Spiel Airport City installiert. Grundsätzlich muss man sich da nicht registrieren, aber dafür verliert man seinen Account, wenn man das Gerät wechselt. Vermutlich verwendet die App dafür beim ersten Start eine UUID und verwendet diese als Userkennung für den Server.

Ein Reverse-Engineer kann aber sowieso von ausserhalb der App auf seine Daten zugreifen. Du kannst ihm das vermutlich mit verschiedenen Techniken (Code Obfuscation / eigenes Kommunikationsprotokoll mit Certificate Pinning / prüfen, ob der Request wirklich von Android kommt / etc.) erschweren, aber ob du es komplett verhindern kannst, weiss ich nicht. Sicherheitstechnisch ist das ja auch nicht so ein Problem, da er ja sowieso nur auf seine eigenen Daten Zugriff hat.
 
Moin!

Danke für die schnelle Antwort.
Die Daten sind sowohl benutzerspezifisch als auch öffentlich. Benutzer können ein eigenes Profil anlegen und hiermit Daten erfassen, die wiederum allen anderen zugänglich gemacht werden können, z.B. durch eine Suche.
 

Ähnliche Themen

S
Antworten
33
Aufrufe
2.676
Sempervivum
S
S
  • softwareunkundig
Antworten
1
Aufrufe
886
jogimuc
J
Zurück
Oben Unten