Datenbank-Kommunikation absichern

  • 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!

  • Also du musst nicht zwangslaeufig GET Requests nutzen. POST ist hier sicherlich etwas besser. Und dann kannst du ja deine Daten die du hin und her sendest auch verschluesseln. z.B. die gesamte Kommunikation per JSON (Array).
    Du koenntest zb. Dich einmalig anmelden - dann gibst du einen verschluesselte UserID zurueck und nutzt diese zb als Salt oder dynamischen Key um die eigentlichen Requests zu verschluesseln. Auf der Gegenseite musst du halt alles wieder auseinanderbauen, wie sehr man das ganze verschachtelt (mehrere Durchlaeufe) das kannst du ja von der Sensibilitaet der Daten anhängig machen.
    Ich hab da bei Google ein schoenes Android / Php Beispiel gefunden....die Klasse hiess glaube ich mcrypt...


    Edit:


    hier mal der LINK


    http://www.androidsnippets.com…t-between-android-and-php

  • Kurze Antwort: gar nicht.
    Du übersiehst den entscheidenden Punkt: Der Sinn einer Webschnittstelle ist es, von überall erreichbar zu sein. Wenn also jemand den Request im Browser abschickt sieht er die Antwort.
    Works as intended.


    Welche Daten sollten so schützenswert sein, dass kein Anderer sie sehen darf?
    Wieso hast Du Benutzerdaten, wenn Deine Benutzer keine Loginmöglichkeiten haben?


    Die Verbindung selbst solltest Du via SSL absichern.


    Wie viel Ahnung hast Du von der Webentwicklung? Sobald die Benutzeranmeldung erfolgt, sichert sich der Server eine Session. Diese Session wird mit dem Nutzer starr verknüpft. So kann jeder Nutzer nur seine Daten.


    Gegenfrage: wenn Du in Deiner App Server-IP, Datenbanknutzer und Datenbankkennwort integrierst und sich Apps ja gern 'reverse engineeren' lassen, wie kannst Du dann sicher stellen, dass nur Deine App die Anfragen an die Datenbank stellt?

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!