Gesicherte Abfrage von Daten aus dem Netz

  • Hallo,


    meine App umfasst teilweise größere Datenmengen, die aber nicht jeder Nutzer braucht. Die Daten bestehen aus Datenbankeinträgen, die die App auf Wunsch des Nutzer nach der Installation von meiner Seite laden soll. Die Daten werden über ein PHP Script im JSON Format bereitgestellt, so dass die App die Daten lesen und speichern kann.


    Jetzt bräuchte ich eine Idee, wie ich sicher gehen kann, dass nur die App die Daten herunterlädt und diese nicht einfach abgerufen werden können.


    Ich gehe mal davon aus, das es für Fortgeschrittene kein Problem darstellt, herauszufinden auf welche Seiten die App zugreift und auch POST Daten auslesen können, oder sehe ich das falsch?


    Gruß


    Markus

  • Hallo Laire,

    Zitat

    Jetzt bräuchte ich eine Idee, wie ich sicher gehen kann, dass nur die App die Daten herunterlädt und diese nicht einfach abgerufen werden können.

    Den Vorschag von antifish finde ich gut.


    Außerdem würde ich in der App auch noch einen Hash (MD5 oder SHA1) über die AndroidManifest.xml einbauen.
    Dann könnte ich auf der Serverseite über PHP nicht nur feststellen, dass die Anforderung von meiner App stammt, sondern auch welche App Version es ist, falls ich man Änderungen der Struktur der zu übersendenden Daten vornehmen......
    Schöne Grüße, schymura :)

  • Hallo schymura,


    die Version deiner Datenstruktur würde ich als Versionsnummer einfach im App-Code speichern und als Parameter an das PHP-Script übergeben - dann muss dein PHP-Script nicht erst eine Liste von App-Versions-Nummern oder -Codes abklappern.


    Abfrage über HTTPS sollte die Übertragung deiner Daten dann auch unlesbar auf dem Übertragungsweg machen - das sichert aber noch nicht die Abfrage der Daten von etwas anderem als deiner App.


    Wenn du ganz sicher gehen willst, wie wäre es mit diesem Ablauf:

    • App fragt PHP nach Zugangscode und erhält einen Zufalls-String (diesem auf dem Server kurzzeitig speichern)
    • App verschlüsselt diesen String und sendet diesen mit den anderen Anfrageparametern zurück
    • PHP entschlüsselt diesen wieder und bei Übereinstimmung werden die Daten ausgeliefert

    Klingt vielleicht etwas aufwändig, aber dadurch ist sichergestellt, dass kein fester Zugangscode für das PHP-Script existiert.


    Viele Grüße
    Uwe

  • Hallo UweApps,
    irgendwas ist schief gelaufen........

    Zitat

    die Version deiner Datenstruktur würde ich als Versionsnummer einfach im App-Code speichern und als Parameter an das PHP-Script übergeben - dann muss dein PHP-Script nicht erst eine Liste von App-Versions-Nummern oder -Codes abklappern.

    Ich hatte nur festgestellt, dass die Antwort von antifish auf die Frage von Laire gut ist. Ich finde ihn nur noch erweiterbar.
    Dazu schlug ich vor einen Hash von der AndroidManifest.xml zu erzeugen. Dass diese Zeichenfolge dann in der App vorhanden sein muss versteht sich ja wohl von selbst, denn nur so ist sie ja an den Server, auf dem PHP laufen sollte, mit zu übersenden.
    Wenn dann der richtige Hashstring (verschüsselt oder nicht) auf dem Server ankommt, dann ist eindeutig klar, dass die Anforderung von der App auf irgendeinem Smartphone kommt.
    Dein weitergehender Vorschlag ist auch nicht schlecht!

    Code
    App fragt PHP nach Zugangscode und erhält einen Zufalls-String (diesem auf dem Server kurzzeitig speichern)


    Ich würde nicht den Zufallsstring kurzfristig auf dem Server Speichern, sondern nur einen Hash darauf. Wenn dieser Hash dann bei der weiteren Dateanforderung wieder an den Server gesandt wird ist alles gesichert. Aus einem Hash lässt sich nie wieder die ursprüngliche Zeichenfolge erstellen.
    Das setze ich zumindest ein um über Captcha von einer Webseite aus festzustellen, ob es ein Webrobot ist, oder eine Mensch. Außerdem hat dies dann noch den Vorteil, dass man bei gleicher IP-Adresse auch noch die unterschiedlichen Captcha den verschiedenen Usern zuordnen kann, ohne einen riesigen Speicheraufwand (IP, Browser, Betriebssysttem etc.), der ja sonst nütig wäre, wenn sich eine WG hinter der IP steht oder gar ein Proxy.
    Schöne Grüße, schymura ^^

Jetzt mitmachen!

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