Daten so lokal speichern, dass User sie nicht lesen/verändern kann

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Spätestens wenn der Benutzer Zugriff auf das Verzeichnis/Datei hat kann er sie ändern. Und wenn er einen Hex-Editor zu Hilfe nimmt. Aber Du könntest die Integrität der Daten mit einem signierten Hash-Wert sicherstellen.

    Problem dabei: Der Angreifer darf keinen Zugriff auf den privaten Schlüssel haben. Es wäre denkbar, einen Webservice aufsetzen, der Dir den Hashwert signiert. Wenn Du das dann überprüfst, holst Du vom Webservice den öffentlichen Schlüssel und überprüfst die Signatur des gespeicherten Hashwertes.

    Vorteil: Keine öffentlichen und/oder privaten Schlüssel auf dem Device nötig.

    Nachteil: Du brauchst einen Webservice und eine Internetverbindung.

    Weniger aufwändig: Du versteckst den privaten Schlüssel in der Anwendung. Jetzt langt es schon nicht mehr nur die Daten zu ändern, sondern jetzt muss er auch die Anwendung an sich hacken, was aufwändiger (aber durchaus machbar) ist.

    ciao

    gandhi
  • Also ich hab das immer so gemacht, das ich für bestimmte Dateien einen Hashwert erstellt habe und diesen fest in die App Integriert habe, sobald dieser Wert nicht mehr stimmt hat der Benutzer diese Datei verändert und kann nicht mehr genutzt werden. Natürlich kommt es drauf an was in deiner Datei stehen wird / soll.
  • Aber man kann den Hashwert in der Anwendung ändern. Deswegen der Vorschlag mit dem Webservice. Ist halt eine Frage, wie "teuer" die Daten sind bzw. welchen Aufwand man treiben will. Für den Gelegenheitshacker tut's der Hashwert. Etwas mehr Aufwand braucht's schon für eine lokale Signatur und mit Webservice wird's nochmal aufwändiger.

    Wobei ich der Meinung bin, das ganze lohnt nicht: Minimaler Aufwand für den Schutz ist OK, der Rest ist für die Katz. Lieber die Zeit in ein nettes Feature stecken, über dass sich der Anwender freut.

    ciao

    gandhi
  • es bringt alles nichts. man kommt immer an die daten dran wenn man will. deswegen keine daten auf das gerät packen die auf keinem fall in fremde hände fallen dürfen.
    wenn jemand seine eigenen spielstände maniüuliert dass sie auf seinemg erät falsch angezeigt werden dann ist das eben so ;)

    das schlauste ist wohl eine grundverschlüsselung zu verwenden und keine allzuviel zeit in den teil investieren denn wenns jemanden intressiert holt er sich die daten immer (in dem moment wo er mit gdb etc an deiner laufenden binary hängt, hast du verloren).
  • SteveJ schrieb:

    gritsch schrieb:

    in dem moment wo er mit gdb etc an deiner laufenden binary hängt, hast du verloren


    Das gibt jemand aber schnell auf. Man das natürlich nicht

    Quellcode

    1. if (isLicenseValid()) { ... }


    programmieren...


    klar, die frage ist halt was man schützen will und vor wem und was passiert wenn es geknackt wird.
    es soll ja leute geben die meinen sie können den username und passwort in der app speichern und dann direkt auf die DB auf dem server zugreifen. (womöglich sogar mit einem user der schreibrechte hat). dann braucht es nur einen einzigen der das macht und man hat ein problem. wenn es aber darum geht dass sich irgendjemand in-app-purchases erschleicht dann ist das eben weniger schlimm (ersteres sollte man eh nicht machen und den programmieren also sagen dass man an alles rankommt, egal wie sies verschlüsseln).
  • Viele gute Anregungen, danke euch!

    Also meine Daten sind nicht so "teuer". Meine User dürften die Daten auch lesen wenn sie sich so einen Aufwand machen. Das ganze werd ich dann mit einem Hashwert sichern und bei Übertragung an die DB überprüfen.

    Frage wär jetzt noch WO lokal speichern? Die Daten sollten auch nach App-Beendigung noch gespeichert bleiben.
    NSUserDefaults? Kann ein 0815-User auch nicht lesen oder?
  • Thallius schrieb:

    Dann gehören sie in den CachedOrdner.

    Jein: In "Caches" sollte man nur Inhalte schreiben, die das System auch gerne bei Bedarf löschen kann, weil sie dann von der App leicht neu generiert werden können (Link). Das wäre für Offline-Inhalte, die bei der nächsten Internet-Verbindung gesyncht werden sollen, eher suboptimal, denn diese sind nur (!) auf dem Device verfügbar. Ich würde für solche Zwecke eher den "Application Support" Ordner wählen...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • MyMattes schrieb:

    Thallius schrieb:

    Dann gehören sie in den CachedOrdner.

    Jein: In "Caches" sollte man nur Inhalte schreiben, die das System auch gerne bei Bedarf löschen kann, weil sie dann von der App leicht neu generiert werden können (Link). Das wäre für Offline-Inhalte, die bei der nächsten Internet-Verbindung gesyncht werden sollen, eher suboptimal, denn diese sind nur (!) auf dem Device verfügbar. Ich würde für solche Zwecke eher den "Application Support" Ordner wählen...

    Mattes


    und wenn du Pech hast lehnt Apple deine App dann ab.

    Wenn die Daten aus dem Netz kommen und unverändert gespeichert werden, dann können sie auch jederzeit wieder aus dem Netz hergestellt werden. damit müssen diese daten in den Cached Ordne. Das ist so ganz klar Vorgabe von Apple. Werden die Daten vom System dort gelöscht, dann muss die app sich die halt neu holen .

    Gruss

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    Wenn die Daten aus dem Netz kommen und unverändert gespeichert werden, dann können sie auch jederzeit wieder aus dem Netz hergestellt werden

    Schon klar, aber genau das ist oben doch gar nicht erwähnt ... oder bin ich blind? Hier war nicht nicht zu erkennen, dass die Daten unverändert aus dem Netz gespeichert werden sollten, und im Falle von lokal erzeugten Daten, wie z. B. Spielständen, ist Caches nun einmal eine unkluge Wahl.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Nur zur Klärung: Die Daten werden auf dem Gerät generiert (ähnlich Spielstände), auf dem Gerät gespeichert und bei Internetverbindung übertragen+ dann lokal gelöscht. Somit passt der Caches-Ordner nicht.

    Another example of files that might go in the Documents
    directory are saved games, again because they are something that an app
    could potentially provide some sort of method for selecting.

    Anything that the app does not want the user to see or modify directly should be placed outside of the Documents directory.


    Was meint ihr... Daten selbständig verschlüsseln und in den Documents-Ordner?

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von danyball ()

  • Daten so lokal speichern, dass User sie nicht lesen/verändern kann

    Um was vor wichtige Daten handelt es sich den? Ich glaube kaum das ein 08 15 User einfach so Daten einer App ändert, die meisten nutzen die App ganz Normal über die UI. Glaube du machst dir zu viele Gedanken.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Nero ()