Hi,
Ich hab eine fix fertige Web-Applikation in der man User und Passwort eingeben muß um in eine Art Memberbereich zu kommen. Passwort und User wird dann in der Session gespeichert. Das Problem das ich glaube zu haben ist die Übertragung des Passworts vom Client zum Server. Welche einfachen Möglichkeiten gibts da?
https??
danke
lg Burnswigg
Gibts da ein paar Tips wie man so eine Verbindung/Übertragung aufbaut?
lg Burnswigg
Für HTTPS benötigst du aber ein Zertifikat auf deinem Webserver. Das kostet etwas.
Um eine HTTPS Verbindung zu ermöglichen benötigst du an der Programmierung so gut wie nichts unternehmen.
Du musst bei deinem ISP ein Zertifikat für deine Domain kaufen. Dies kostet in der Regel 150€ im Jahr und ist eigentlich kein Problem.
Das einzige was du dann durchführen musst ist, dass die Eingabe immer unter HTTPS gemacht wird und nicht unter HTTP.
Ich würde das Kennwort nicht in einer Session speichern. Das würde heißen das alle Seiten dann unter HTTPS stehen müssen. Und das braucht man meiner Meinung nach nicht unbedingt.
Der Benutzername sollte langen.
Für HTTPS benötigst du nur ein Zertifikat, dass kannst du dir aber selbst erstellen. Bezahlen musst du nur, wenn du das Zertifikat auch von einer CA (etwa Verisign o.ä.) zertifizieren lassen willst.
Für die reine Verschlüsselung ist das aber unnötig. Es kommt dann beim Verbinden im Browser zwar immer die Meldung, dass die Identität des Zertifikats nicht verifiziert werden konnte (logisch), allerdings brauchst du das Zertifikat bloß einmal in den Zertifikatsspeicher zu importieren und schon ist Ruhe.
Verschlüsselung per HTTPS geht trotzdem und kostet nichts.
Nur wenn du Wert darauf legst, dass jeder Nutzer in jedem Browser automatisch deinem Verisign (o.ä.) zertifizierten Zertifikat vertraut, kostet das was.
In einer Firmenumgebung kann man zum Beispiel allen Rechnern die firmeninterne CA als vertrauenswürdig installieren und schon gilt das auch für alle von ihr ausgestellten Zertifikate.
eine andere Möglichkeit wäre das du nur ein HashCode des pw an den Server schiken würdest.
und auf dem Server wieder mti dem HashCode vergleichen
Danke für die Infos,
Da ich nicht will dass der User die Zertifikate immer bestätigen muß und ich auch kein Zertifikat kaufen möchte. Scheint mir die beste Möglichkeit der Hashcode zu sein.
lg Burnswigg
jetzt bleibt nur noch die Frage ob du in der DB mit den Pw's den HashCode speichern willst oder den Klartext.
stimmt, bis datto hab ich die Passwörter als Klartext.
Da ich ein Schichtenmodell (BO,DA,Common) benutze ging es eigentlich dass ich eine Funktion für den Hash schreibe. Gibts da eigentlich was vorgefertigtes?
lg Burnswigg
string test = "test";
int hashCode = test.GetHashCode();
Bin grad draufgekommen dass der Hash doch nicht so fein ist da man ihn ja
nicht mehr zurück wandeln kann.
lg Burnswigg
ja darum kanst du in auf dem server als String abspeichern
wenn der Client sich anmeldet wird sein PW als Hash an den Server geschikt und der Server erstellt auch ein Hast aus dem String auf der DB und vergleicht beide.
Hallo Burnswigg,
Hash ist aber sicherer. Du speicherst einfach den Hashwert des PWs beim anlegen des Benutzers in die Datenbank. Wenn der Benutzer sich anmelden will, lässt du dir den Hash vom Passwort geben und vergleichst diesen mit dem der Datenbank.
Du kannst ja so etwas einbauen wie "Passwort zurücksetzen" und schickst dem User dann eine Mail mit dem neuen PW. Dieser kann das PW dann in seinen Einstellungen wieder ändern.
//Edit: zu spät X(
Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de
Aber bitte den Hash nicht so erstellen:
Original von jstolz
string test = "test"; int hashCode = test.GetHashCode();
Sondern:
string test = "test";
byte[] hash = (new SHA512Managed()).ComputeHash( Encoding.GetBytes( test ));