2016-04-08 5 views
0

Jeder weiß, dass Sie sensitiveInfo Variable nicht an Ihrem Js-Code halten sollten. Der bessere Weg ist, es in den lokalen Speicher zu legen. Könntest du bitte anhand meines Beispiels Schwachstellen des ersten Ansatzes erklären?Sicherheitsmängel der Aufbewahrung sensibler Informationen innerhalb Javascript-Code

Beispiel: Sie verwenden Bündler, die alle Ihre js-Dateien zusammenfassen. sensitiveInfo ist nicht global, aber in YourStorage.js gespeichert. Für den Zugriff auf Dateien, die es hält Sie tun:

import YourStorage from 'somepath/YourStorage'; 
YourStorage.sensitiveInfo = newValue; // QUESTION: can you steal this value? Is it accessible from console? 

Fragen:

  1. Ist sensitiveInfo Variable zugänglich von der Konsole?
  2. Könnten Sie bitte Mechanismus beschreiben, wie jemand sensitiveInfo stehlen kann?
  3. Wenn jemand kann es aus meinem Code stehlen, warum konnte er nicht aus dem lokalen Speicher?

UPDATE: (wem ich versuche, von zu schützen) Ich schreibe mobile Web-App, wo die Nutzer echtes Geld ausgeben können. Ich möchte sie vor allen Arten von Angriffen schützen, wo sie ihr Geld verlieren können (d. H. Lokal installierte Viren)

+0

* Wen * versuchst du * vor * zu schützen? – deceze

+0

Sie können alles aus dem lokalen Speicher zurückholen. Es ist einfach nur Text und sehr leicht zugänglich. Sie sollten sensible Daten wahrscheinlich nicht im lokalen Speicher speichern. –

+0

@JosephMarikle wo authToken für autologin gespeichert werden soll? –

Antwort

2

Alles in javaScript, das heruntergeladen werden kann, kann leicht auf dem Benutzer Gerät gesehen werden. Die häufigste Methode zum Sichern vertraulicher Informationen, die an einen Client weitergeleitet werden müssen, lautet:

Verwenden Sie zuerst SSL, um die Informationen über das "Kabel" zu verschlüsseln.

Zweitens, wenn die Daten sehr sensibel sind - wie ein Token zur Verarbeitung von Kreditkarteninformationen (speichern Sie die Kartennummer nicht in diesem Token!) - sollten diese Daten selbst verschlüsselt werden, unter Verwendung eines Seed/Schlüssel, der sicher auf dem Anwendungsserver gespeichert ist.

Oft schreiben Sie die Anwendung so, dass sowohl die Identität des Benutzers als auch das Gerät verifiziert werden muss. Nach dieser Überprüfung würden Sie dann das Token entschlüsseln - indem Sie einen Schlüssel verwenden, der nur auf der Serverseite Ihrer Anwendung gespeichert ist und nur von dieser verfügbar ist.

Mit dieser Vorgehensweise können Sie vernünftigerweise davon ausgehen, dass der Benutzer und das Gerät diejenigen sind, von denen sie sagen, dass sie vorhanden sind. Natürlich benötigen solche Anwendungen selbst eine ordnungsgemäße Authentifizierung - wobei diese Berechtigungsnachweise nicht auf dem Gerät gespeichert werden -, um zu verhindern, dass gestohlene Geräte leicht für den Zugriff auf das Anwendungskonto/die Anwendungsdaten verwendet werden können. Verlassen Sie sich zur Sicherheit nicht einfach auf eine Bildschirmsperre.

+0

Viel bessere und viel prägnantere Erklärung als meine schwachen Versuche in den Kommentaren. Aus eigener Neugier, wie gewährleisten Sie die Identität von Benutzer ** und Gerät **? Die meisten Geräteinformationen lassen sich leicht fälschen (MAC-Adresse, IP). Sie müssen darauf vertrauen, dass die Informationen, die Sie senden, trotzdem korrekt sind, oder? Also, gibt es wirklich einen Punkt, um das Gerät nach seiner Identität zu fragen? –

+0

Je nachdem, was das Gerät ist, gibt es verschiedene Methoden. Oft verfügen Artikel wie Smartphones und Tablets über eindeutige Tasten (z. B. Seriennummern), die bei der Kontoeinrichtung verwendet werden können, um zu sagen, dass sich dieser Benutzer auf diesem Gerät befindet. IPs und MAC werden selten mehr verwendet, die IP kann leicht geändert werden, wenn der Benutzer sich mit einem anderen Netzwerk verbindet, und MAC-Nummern werden leicht gefälscht.Wenn ein solcher eindeutiger Schlüssel nicht verfügbar ist, wird er normalerweise bereitgestellt, wenn der Benutzer das Konto einrichtet und (in verschlüsselter Form) auf dem Gerät speichert. – Blackthorne

+0

@Blackthorne danke für deine antwort! Könntest du bitte erklären, wie man mit Token autologin arbeitet, sollte in deinem Schema funktionieren? Sie sagten, dass ich zuerst Benutzer identifizieren und dann das Token nur entschlüsseln sollte. Aber wie kann ich Benutzer ohne Token identifizieren? –

Verwandte Themen