Wie sicher ist die lokale Speicherung?

33

Die Frage sagt eigentlich schon alles. Ich möchte eine Dienstleistung erbringen, möchte aber selbst keine Daten in einer Datenbank speichern. Angesichts der neuesten Nachrichten über Hacking usw. scheint es mir besser zu sein, dass Kunden die vollständige Kontrolle über ihre Daten haben.

Das Problem ist, dass die gespeicherten Daten möglicherweise vertraulich sind. Was ich tun wollte, war ... wenn ein Kunde die Website besucht, stellte sich die Frage, ob Sie sich auf einem PC oder einem öffentlichen Computer befinden. Wenn sie sich auf einem öffentlichen Computer befinden, verweigert die Site den Zugriff.

Wenn sie sich auf einem PC befinden, werden sie aufgefordert, ein Kennwort festzulegen. Alle ihre Daten würden dann mit diesem Passwort verschlüsselt. Nun ist dies offensichtlich nicht zu sicher. Die Verschlüsselungsmethode ist JavaScript und das Passwort ist Klartext. Ich gehe davon aus, dass ein erfahrener Benutzer das Passwort im localStorage finden und auf die Daten zugreifen kann.

Ich glaube jedoch, dass dies kein allzu großes Problem ist. Wenn Sie einen PC verwenden, ist die Wahrscheinlichkeit gering, dass dies passiert, da ... jemand anderes Zugriff auf sein bestimmtes Benutzerkonto auf dem Computer benötigt, jemand anderes etwas über die Site wissen muss ... jemand anderes etwas verstehen muss localStorage und wie man darauf zugreift. Die sensiblen Daten sind keine, die ihre Identität gefährden oder vieles andere. Es zeichnet nur etwas auf, das die meisten Menschen nicht gerne öffentlich veröffentlichen würden.

Die Frage ist also, ob localStorage sicher genug ist.

Zusätzliche Frage .. Wie schwierig ist es, Ihren localStorage zu löschen? Ich möchte nicht, dass Benutzer versehentlich ihre Daten löschen.

Schließlich - lohnt es sich sogar, ihre Daten zu verschlüsseln / entschlüsseln, als ob Sie das Passwort haben, können Sie auf die Website zugreifen.

JasonS
quelle
2
Clientseitiges JavaScript ist nicht der beste Ort, um Kryptografie zu betreiben. Jeder geschickte Benutzer kann sich den Code ansehen und in Ihre Verschlüsselung hacken, um sicherzustellen, dass er nichts tut und nur das verschlüsselte Passwort akzeptiert.

Antworten:

10

Wie wäre es, wenn Sie das Passwort überhaupt nicht speichern, auch nicht lokal? Sie können eine Schlüsselableitungsfunktion verwenden, um einen Schlüssel aus dem Kennwort abzurufen. Mit einem Salz und einer angemessenen Anzahl von Iterationen sollte dies anständig sicher sein.

CodesInChaos
quelle
Es wäre sicherer, wenn das Passwort an PHP übergeben würde, das dann den Schlüssel hinter den Kulissen generiert hat.
JasonS
Nein. Das Passwort wird zuerst auf dem Client vergeben. Indem Sie es an den Server senden, erhöhen Sie das Risiko, dass es gestohlen wird. Durch die Schlüsselableitung in JS bleibt das Geheimnis auf dem Client. In jedem Fall sollten Sie den PW kurz danach vergessen. Aber ich denke, es ist immer noch sinnlos - siehe meine Antwort.
Viele Hacker sind ziemlich intelligent ... Verwenden Sie Lib bCrypt.
Eddie B
2

Die Verwendung von JavaScript mit lokalem Speicher ist maximal so sicher wie (Ihr Server plus die Verbindung zwischen Browser und Server).

Wenn es jemandem gelingt, Ihren Server zu ändern und andere JS-Dateien bereitzustellen oder (während der Übertragung) die JS-Dateien zu ändern, die vom Server an den Client gesendet werden, kann er mit den gewünschten Daten alles tun.

Zusätzlich: Da sich die Daten auf dem Client befinden, können Sie nichts tun, um die Daten zu schützen. Auf einem gewöhnlichen Server könnten Sie zB die Zugriffshäufigkeit einschränken (Beispiel für einen Remote-Passwort-Safe: Nur 1 Passwort wird innerhalb von 10 Minuten gelesen). All dies ist nutzlos, wenn sich die Daten auf dem Client befinden und der gesamte Code, der mit den Daten arbeitet, von einem Angreifer manipuliert werden kann.

Schließlich müssen Sie auch mit localstorage Ihre Webanwendung sichern! Warum dann etwas auf dem (hoffentlich) sicheren Server machen? Wenn nein, warum nicht auch ein auf dem Client installiertes lokales Programm verwenden?

Daniel Böhmer
quelle
Denken Sie nicht, dass die Hauptsicherheitsproblematik darin besteht, dass das Gerät von jemand anderem verwendet oder gestohlen wird?
2

Wie wäre es mit einem Schlüssel vom Server, mit dem die localStorage-Daten entschlüsselt werden?

Es könnte so funktionieren:

  • Wenn eine Sitzung eingerichtet ist, gibt der Server einen Schlüssel zurück.
  • Dieser Schlüssel wird zum Ver- / Entschlüsseln der Daten in localStorage verwendet.
  • Wenn der Benutzer die Seite verlässt, geht der Schlüssel verloren und andere können nicht mehr lesen, was in localStorage enthalten ist.

Dies sollte nur den Zugriff ermöglichen, während ein Benutzer eine Sitzung eingerichtet hat.

Justin Meyer
quelle
3
Dies würde jedoch nicht funktionieren, um offline auf die Daten zuzugreifen (was als primärer Anwendungsfall für localStorage erscheint). Um diese Methode offline zu verwenden, müssen Sie den Schlüssel behalten.
Timothy Lee Russell
0

Im Allgemeinen ist es nicht schwer, den lokalen Speicher zu löschen, aber es hängt vom Browser ab. Sie müssen jedoch die Entwicklertools des Browsers aufrufen (Firebug, Webkit usw.).

Denken Sie daran, wie Sie an Cookies denken. Sie sollten niemals vertrauliche Daten im lokalen Speicher aufbewahren. Passwörter, Kreditkartennummern, was auch immer.

Sie können immer eine Funktion implementieren, um den lokalen Speicher nach x Inaktivität zu löschen, dies wird jedoch kein Sicherheitsproblem lösen. Es ist wie eine automatische Sitzung ablaufen. Dasselbe Problem tritt auf, wenn eine Person einen Computer verlässt und sich dann eine andere Person setzt, bevor die Sitzung abläuft.

hvgotcodes
quelle
0

Zwei Probleme:

  1. Wenn Sie Klartext-Passwörter speichern und sich dann auf die Tatsache verlassen, dass diese wahrscheinlich nicht gefunden werden, ist dies nur Sicherheit durch Unbekanntheit. Speichern Sie die Daten einfach im Klartext und verlassen Sie sich auf die gleiche Annahme (immer noch nicht sicher, aber kein falsches Sicherheitsgefühl)

  2. Wenn Benutzer in den meisten Browsern ihren Cache löschen, entfernen sie auch ihren localStorage-Inhalt. Die Benutzer erwarten nicht, wichtige Daten zu verlieren, wenn sie den Verlauf und den Cache löschen.

Ich denke, Sie überbieten, wofür localStorage gedacht ist. Wenn Sie eine lokale Datenbank verwenden möchten, die gut mit Webapps funktioniert, können Sie einen Blick auf die Couchapps von CouchDB werfen .

Aber speichern Sie das Passwort nicht.

Giacomo
quelle
0

Sie könnten Javascrypt verwenden . Fragen Sie den Benutzer nach einem Kennwort, das als Verschlüsselungs- / Entschlüsselungsschlüssel verwendet werden soll

Sie müssen das Kennwort nicht speichern, sondern müssen es jedes Mal anfordern, wenn der Benutzer die Seite öffnet.
Kann es speichern, wenn der Benutzer will, und jetzt die Auswirkungen.

Aber was ist dann mit dem Kommentar von stivlo?

  1. Zugriff auf mehrere Geräte
  2. Sicherung
  3. Passwort vergessen
  4. zu einfaches Löschen des Caches

Ich denke, Sie sollten den Beginn der Überlegungen überdenken. Vermeiden Sie die Cloud nur wegen einiger jüngster und sensationeller Ereignisse, ist eine schnelle Schlussfolgerung.

Mic
quelle