Sicherheitsaspekt JavaScript

SyntaxTalksToMe

Bekanntes Mitglied
Guten Morgen,

durch mein aktuelles Chat-Programm habe ich mich die letzten Tage mit JavaScript befasst. So wie es für mich aussieht, kann JavaScript praktisch alles. Ich befasse mich also damit und es gab Momente, wo ich mich gefragt habe, warum man da noch beispielsweise JavaEE braucht.

Allerdings dann ist mir der Sicherheitsaspekt eingefallen und das die JavaScripts genau wie der HTML Code leicht einsehbar ist. Aber ich möchte nicht, dass Personen von außen sehen, wie wie Passwörter verschlüsselt werden, oder welchen Inhalt Querys haben.

Denk ich da falsch? Oder denke ich da über Dinge nach, die nicht zu ändern sind?
Als Ausweg hatte ich mir überlegt:

Ich schreibe eine Methode in Java die ein Passwort verschlüsselt inklusive Salt Wert. Dann schreibe ich ein JavaScript, dass genau diese Methode aus der Java Klasse aufruft um ein Passwort zu verschlüsseln. Somit sehen außenstehende, dass da zwar eine Verschlüsslung stattfindet, aber nicht was unter der Haube passiert.

Jetzt meine Frage:

Denke ich da falsch? Habe ich falsche Vorstellungen wie das abläuft? Falls nein, ist dies ein praktikables und gängiges Vorgehen?

Ich danke im Voraus
 

thecain

Top Contributor
Grundsätzlich kannst du dem Client nicht vertrauen. Alles was direkt im Browser läuft kann angeschaut und/oder manipuliert werden.
Deswegen wird meistens eine Client Server Architektur eingesetzt. Hierbei werden dann die Aufrufe an einen Server z.B. mit JEE entwickelt geschickt. Dort validiert und ausgeführt. Das Resultat wird dann an den Client geschickt, der für die Darstellung zuständig ist.
 

mihe7

Top Contributor
Aber ich möchte nicht, dass Personen von außen sehen, wie wie Passwörter verschlüsselt werden, oder welchen Inhalt Querys haben.
Wie die Passwörter verschlüsselt werden, kannst Du im Prinzip ruhig sehen. Das bringt Dir nämlich herzlich wenig, weil Passwörter nicht mehr entschlüsselt werden. Gespeichert werden Hash-Werte und die werden miteinander verglichen.

Beispiel: Benutzer wählt bei Registrierung als Passwort "12345" (was sonst?), in der DB wird dann z. B. der SHA2-256 Hash davon gespeichert, oft in Hex: "5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5". Man kann die Sicherheit durch verschiedene Maßnahmen noch erhöhen, z. B. tausende Hash-Runden durchführen (es spielt ja keine Rolle, ob der Login 0,5 s länger dauert, einen Angriff dagegen können die 0,5 s durchaus vermiesen) und die Passwort-DB mittels Salt und Pepper weiter absichern, sollte sie mal in falsche Hände geraten.

Wenn sich nun ein User anmeldet, wird das eingegebene Passwort an den Server gesendet, der Server berechnet den Hash und vergleicht diesen mit dem, der in der DB steht.

Jetzt hat man natürlich das Problem, dass das Passwort im Klartext an den Server gesendet wird. Einige kommen dann auf die geistreiche Idee, das Passwort zu "verschlüsseln", d. h. gleich das gehashte Passwort zu übertragen. Das ist aber von 12 bis Mittag gedacht, denn damit überträgt man auch nichts anderes als Klartext - nur, dass ich mir als Angreifer noch das Hashing spare. Daher ist es wichtig, dass man die Übertragung absichert (TLS).

Und: Passwörter werden clientseitig schon gar nicht gespeichert.
 

SyntaxTalksToMe

Bekanntes Mitglied
Wie die Passwörter verschlüsselt werden, kannst Du im Prinzip ruhig sehen. Das bringt Dir nämlich herzlich wenig, weil Passwörter nicht mehr entschlüsselt werden. Gespeichert werden Hash-Werte und die werden miteinander verglichen.

Beispiel: Benutzer wählt bei Registrierung als Passwort "12345" (was sonst?), in der DB wird dann z. B. der SHA2-256 Hash davon gespeichert, oft in Hex: "5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5". Man kann die Sicherheit durch verschiedene Maßnahmen noch erhöhen, z. B. tausende Hash-Runden durchführen (es spielt ja keine Rolle, ob der Login 0,5 s länger dauert, einen Angriff dagegen können die 0,5 s durchaus vermiesen) und die Passwort-DB mittels Salt und Pepper weiter absichern, sollte sie mal in falsche Hände geraten.

Wenn sich nun ein User anmeldet, wird das eingegebene Passwort an den Server gesendet, der Server berechnet den Hash und vergleicht diesen mit dem, der in der DB steht.

Jetzt hat man natürlich das Problem, dass das Passwort im Klartext an den Server gesendet wird. Einige kommen dann auf die geistreiche Idee, das Passwort zu "verschlüsseln", d. h. gleich das gehashte Passwort zu übertragen. Das ist aber von 12 bis Mittag gedacht, denn damit überträgt man auch nichts anderes als Klartext - nur, dass ich mir als Angreifer noch das Hashing spare. Daher ist es wichtig, dass man die Übertragung absichert (TLS).

Und: Passwörter werden clientseitig schon gar nicht gespeichert.

Das habe ich so bereits gemacht, danke :)

Ich habe zusätzlich einen Zufalls-Salt-Wert hinzugefügt zu dem Password. Die Passwörter werden in einer SQL-Express Datenbank gespeichert. Der Salt Wert, der bei jedem Nutzer anders ist, wird in einer seperaten Datenbank gespeichert.

In dem Chat habe ich bis jetzt:

-Login Seite
-Registrier Seite
-Chat-Oberfläche
-Verschlüsslung
-Nachrichten verschicken ist auch schon möglich. Das Echo vom Server wird angezeigt :)

Momentan bin ich dabei eine Liste zu machen von den Nutzern die Online sind. Wenn ein Nutzer Online kommt und dieser sofort für alle anderen in der Liste sichtbar sein soll - ohne das ganze Fenster zu aktualisieren zu müssen, kann es sein dass ich dafür AJAX brauche? Da wird ja dann nur der Teil der betroffen ist, aktuallisiert.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M JavaScript/HTML/CSS Hilfe HTML / CSS 1
J Mit Javascript eine Textdatei auslesen... HTML / CSS 28
S jqmath in javascript einbinden HTML / CSS 3
M Javascript: HTML-Datei erstellen und auf Festplatte speichern HTML / CSS 8
M Javascript: Farbkontrast überprüfen auf einer Webseite HTML / CSS 14
M Javascript: CSS Parsen um herauszufinden ob relativer Schriftgrößen verwendet werden HTML / CSS 23
M HTML-Code einer fremden Webseite auslesen - geht das mit Javascript HTML / CSS 19
M Webservice per Javascript ansprechen HTML / CSS 5
G php in javascript einbinden HTML / CSS 13
E Javascript/ Eventlistener ohne click? HTML / CSS 2
A Nur bestimmte Zeichen in HTML input Feld erlauben (JavaScript) HTML / CSS 11
J JavaScript Woerter erkenen HTML / CSS 4
C Eclipse und Javascript full autocomplete? HTML / CSS 1
A DragDrop mehrerer Shapes im SVG per Javascript? HTML / CSS 0
M Javascript Tastatureingabe HTML / CSS 2
B javascript ausgabe in Text HTML / CSS 2
E Javascript Status Abfrage HTML / CSS 7
J Javascript im DOM einer Webseite ändern HTML / CSS 1
H javascript - html Beispiel LQH, verwirklichung HTML / CSS 1
P JavaScript var an bean Setter übergeben HTML / CSS 2
Z Erste Website CSS3 HTML5 Javascript Jquery - Kritik HTML / CSS 3
P RSS FEED/ JSON/ Filter By Date/ Handlebars / Javascript HTML / CSS 0
B Externes Suchfeld - Javascript. REST? HTML / CSS 0
S JavaScript und Ajax Erfahrene Gesucht!!!! HTML / CSS 0
V Javascript Adobe Acrobat XI Pro Formular Dropdown-Liste -> vorbelegte Checkboxen HTML / CSS 1
0 Javascript Leaflet Marker Popup mit Adresse HTML / CSS 1

Ähnliche Java Themen

Neue Themen


Oben