2016-07-11 10 views
0

Ich habe im Frühjahr einige Ruhedienste ausgesetzt, mit Feder mvc, ich habe die Webapp mit Federsicherheit gesichert, die bcrypt auf dem Server verwendet, um das Kennwort zu codieren und in der Datenbank zu speichern.Sichern einer HTTPS-Verbindung

Der Benutzer wird das Passwort in der URL im Nur-Text-Format unter https senden, und ich habe eine benutzerdefinierte basic_auth_filter geschrieben, um den Benutzernamen und passowrd - im Grunde zu authentifizieren. Ich habe auch eine Firewall eingerichtet, die nur eine IP-Verbindung erlaubt.

Ich bin kein Sicherheitsexperte, gibt es noch etwas, das ich brauche, sollte ich den Benutzernamen/das Passwort in der URL verschlüsseln .. obwohl es über https kommen wird?

Grüße

ps. Dies war eine Voraussetzung für die Verwendung von Nutzernamen auf der URL?

+0

Obwohl https die Verbindung sichern wird, würde ich die Verwendung eines "gesalzenen Hash" des Kennworts vorschlagen. Anstatt das Kennwort "im Klartext" über den Link zu senden, sendet der Client ein Hash davon. Der Server speichert ebenfalls einen Hash. ### Es gibt eine ** Fülle ** von Quellcode-Bibliotheken, die sich bereits um dieses Problem kümmern. Schau, auf GitHub und anderswo (und in Google .. .), um zu sehen, was * andere Leute * bereits getan haben und geteilt haben .. –

+0

@MikeRobinson Falsch, das Salzen muss getan werden ne auf dem Server. Das OP ist korrekt in der Passwortsicherheit. Wenn es Bedenken hinsichtlich der https-Verbindung gibt, sollte der Client das Zertifikat anheften. – zaph

+0

Ordentlich bestätigt. Vielen Dank. Vielleicht könnten Sie die Frage mit einer detaillierteren Klärung der Frage beantworten, was Ihrer Meinung nach "richtig" oder "falsch" ist? Ich bin mir sicher, dass das OP und andere es begrüßen würden. –

Antwort

1

Passwörter und alle anderen nicht ephemeren Berechtigungsnachweise sollten niemals in der URL gesendet werden, aus keinem anderen Grund, weil die Browser und andere HTTP-Tools und Server dies im Verlauf, verschiedenen Protokollen usw., HTTPS oder nicht merken Es ist trivial, jemanden zu stehlen, der einen lokalen Zugang hat, oder sogar jemanden, der nur über die Schulter schaut. Aus diesem Grund lehnt Spring standardmäßig die Authentifizierung über GET-Anfragen ab.

Aus diesem Grund sollten Sie die sensiblen Parameter in den Hauptteil der Anfrage verschieben (was einen POST erfordert).

Wenn Ihr Login-Flow auf Benutzernamen/Passwörtern basiert, empfehle ich Ihnen, UsernamePasswordAuthenticationFilter zu verwenden, da es bereits die Logik und die Best Practices für diese Art von Fluss einkapselt.

+0

@kaqqo Entschuldigung, ich möchte basic sagen Auth-Filter, der AbstractAuthenticationProcessingFilter erweitert, der es mir ermöglicht, die Parameter request.getParameter (benutzernameParameter) zu erhalten – user1555190

+0

Ok, klingt vernünftig genug. Aber bewege die Params aus den oben genannten Gründen zum Körper. Aus diesem Grund erlaubt UsernamePasswordAuthenticationFilter nur POST-Anfragen. – kaqqao

+0

@kaqqo Verschieben Sie es zum Körper macht es sicherer? Wie das? Werden sie kodiert? wenn ich über https geschickt werde? .. sorry ich weiß sehr wenig über Sicherheit in webapps ... irgendwelche resoccies würde gut sein. – user1555190

1

Im Allgemeinen ist Ihr Schema sicher.

Ziehen Sie in Betracht, den Server zu fixieren, der das Serverzertifikat überprüft, um sicherzustellen, dass die Verbindung zu Ihrem Server besteht.

Das Passwort sollte nicht anders als zur Authentifizierung mit (in Ihrem Fall) bcrypt verwendet werden.

Frage zu aktualisieren: "HTTPS verschlüsselt die Abfragezeichenfolge, nur die tatsächliche Serveradresse Teil ist unverschlüsselt. Aber die vollständige URL einschließlich Abfrage Zeichenfolge wird wahrscheinlich vom Server protokolliert werden, so dass die Sicherheit Auswirkungen hat. Es ist am besten um vertrauliche Informationen in einem POST zu senden.