2016-09-15 4 views
1

Ich muss ein Refresh-Token im Speicher in einer Angular (Javascript) -Anwendung speichern.Schützen eines Refresh-Tokens in Javascript/AngularJS

Das Token wird bei der Authentifizierung über einen Ajax-Aufruf übermittelt und muss dann gespeichert werden, bis der Benutzer sich abmeldet oder den Browser schließt.

Ich möchte jetzt wissen, wie ich dieses Token sicher im Speicher halten kann, so dass es nicht durch Konsolenzugriff oder ein bösartiges Browser-Plugin, das Zugriff auf die Webseite hat, extrahiert werden kann.

fand ich einen anderen Thread, wie Refresh-Token in Winkel verwenden, aber ich denke, die Umsetzung ist nicht sicher:

es, wenn ich die authService mit einem privaten Objekt sicher

AngularJS - http interceptor - resend all request after token refresh

Würde ersetzt Speichern Sie das Refresh- und Access-Token?

+0

Mit welcher Bedrohung möchten Sie sie schützen? Beachten Sie, dass es sich bereits auf dem Client befindet, sodass Sie es nicht vor dem Benutzer verbergen können. Welchen Angriff haben Sie im Sinn? XSS vielleicht? –

+0

ja XSS oder böswillige Browser-Plugin oder ...? Ich bin kein echter Experte in diesen Angelegenheiten – mvermand

+0

Ich dachte darüber nach, es ist eigentlich eine gute Frage. Ich frage mich, was andere Sicherheitsleute denken, hoffe, Sie bekommen eine Antwort. –

Antwort

1

Ich denke, es gibt mehrere verschiedene Bedrohungen, gegen die Sie möglicherweise sensible Daten im Speicher (wie ein Refresh-Token in Javascript) schützen möchten.

Eine Sache, die Ihnen einfällt, ist, dass Ihre Daten auf die Festplatte geschrieben werden. Bedenken Sie, dass der PC, auf dem der Browser ausgeführt wird, nicht genügend Arbeitsspeicher hat und mit dem Swapping beginnt, oder dass der Benutzer sich entscheidet, den Ruhezustand zu aktivieren. Während man in einigen untergeordneten Sprachen das Betriebssystem daran hindern kann, bestimmte Speicherseiten auch beim Swapping auf die Festplatte zu schreiben, hat man weitaus weniger Kontrolle in Javascript, und auch der Ruhezustand kann nicht verhindert werden (in jeder Sprache natürlich).

So eine Sache zu beachten ist, dass Ihre sensiblen Informationen können auf die Festplatte im Klartext geschrieben werden (es sei denn, es gibt eine Art von Festplattenverschlüsselung), und Sie können nicht viel darüber in Javascript, denke ich. Wenn dies nicht akzeptabel ist, sollten Sie wahrscheinlich kein Javascript verwenden.

Eine andere Art von Angriff könnte ein Angreifer sein, der Browser- oder Betriebssystemschwachstellen ausnutzt, um auf Ihren Teil des Speichers zuzugreifen. Sie können nicht viel über diese entweder tun, Sie müssen nur dem Betriebssystem und dem Browser vertrauen.

Und schließlich gibt es Angriffe auf Anwendungsebene, hauptsächlich XSS. Ich denke, man kann die Dinge in gewissem Maße schützen, vor allem indem man Daten so speichert, dass sie nicht anderen Skripten zugänglich gemacht werden, wie zum Beispiel bei Schließungen. This article fasst das besser als ich konnte.

+0

"In einigen untergeordneten Sprachen können Sie das Betriebssystem daran hindern, bestimmte Speicherseiten auf die Festplatte zu schreiben, auch wenn Sie sie austauschen" - können Sie? Bietet der Kernel nicht nur Zugriff auf den virtuellen Speicher? – zerkms

+1

Ja, aber Sie können den Kernel bitten, ihn nicht auf Platte zu tauschen, zumindest auf Linux mit mlock(): http://man7.org/linux/man-pages/man2/mlock.2.html –

+0

Ich sehe , Vielen Dank.. – zerkms