Brett vorm Kopf - Problem mit Script zur Änderung
andreas
- php
Hallo!
Ich probier jetzt gleich 2 Stunden an einem total dummen Problem rum, aber es will einfach nicht funktionieren:
Ich habe ein Formular(.php), welches per Post die Daten an sich selbst schickt. Habe die Felder $new_user, $new_pass und $old_pass, aber aus irgend einem Grund wird nicht das alte Passwort beibehalten($pass_old), wenn man das Feld $new_pass nicht ausfüllt. Wenn ich mich nächstes mal einlogge(anderes Formular) geht das nur wenn ich das Feld für Passwort leer lasse, obwohl eigentlich das alte Passwort beibehalten werden sollte.
else {
$status="OK";
if ($new_pass=""){
$password = $new_pass;}
else {
$password = $old_pass;}
$user = $new_user;
$hash = MD5($password.$user);
$update = "UPDATE kunden SET user='$user',pass='$hash' WHERE ID='$ID'";
Ich hoffe Ihr könnt das verstehen, habe da im Augenblick selbst eine absolute Denkblokade und weiß nicht was ich machen soll?!
Grüsse
Andreas
Hallo andreas!
Uralter und immer wieder gern gemachter Fehler: das Doppel-Gleich in IF!
ich habe mir angewöhnt, beim schreiben einer IF-Anweisung immer gedanklich mitzusprechen:
if ($new_pass identisch-gleich "")
dann denke ich immer dran. Der Zuweisungsoperator funktioniert und gibt ein true zurück.
else {
$status="OK";
if ($new_pass==""){
$password = $new_pass;}
else {
$password = $old_pass;}
$user = $new_user;
$hash = MD5($password.$user);
$update = "UPDATE kunden SET user='$user',pass='$hash' WHERE ID='$ID'";
Ich hoffe Ihr könnt das verstehen, habe da im Augenblick selbst eine absolute Denkblokade und weiß nicht was ich machen soll?!
Jo, sowas sieht man immer als letztes, aber kann es sein, daß Du das meinst?:
if ($new_pass != "")
Grüsse
Andreas
Gruß zurück
(auch) Andreas
Hallo,
evtl. bietet es sich auch noch an (vorsichthalber) Leerzeichen am Anfang und am Ende zu entfernen. Ein Passwort " " ist ja wohl auch nicht unbedingt erwünscht.
if (trim($new_pass) != "")
Grüße aus Würzburg
Julian
Oh, Leerzeichen sollten meiner Meinung nach sehr wohl zu einem guten Paßwort gehören dürfen. So ist es doch immer schwierig, sich kryptische Paßwörter zu merken. Da würde doch ein Leerzeichen dem Anwender das Paßwort kaum erschweren, aber einem Angreifer die Sache sehr erschweren, zumal dieser es ja nicht weiß.
Also: Zusätzlich zu wirren Zahlen und Sonerzeichen kann ich - falls möglich - Leerzeichen nur empfehlen.
So halte ich das Paßwort:
omahilde
schon wie folgt sicherer
o+ma-9hilde
aber noch sicher etwa so:
o+ma-9hi lde
Ich denke, daß sich jemand sowas merken kann. Aber einem Angreifer bieten sich mit der Info "1 Ziffer, 2 Sonder- und 1 Leerzeichen" schon recht viele Kombinationen, vorausgesetzt, er erfährt das!
Gruß
Andreas
Moin!
Also: Zusätzlich zu wirren Zahlen und Sonerzeichen kann ich - falls möglich - Leerzeichen nur empfehlen.
Genau. Ein Paßwort mit nur einem Zeichen ist kein Paßwort, und ein Paßwort aus immer den gleichen Zeichen auch nicht. Also auch eine Mindestlänge prüfen, sonst wird's nix mit der Sicherheit.
So halte ich das Paßwort:
omahilde
schon wie folgt sicherer
o+ma-9hilde
Das sollte schon sehr sicher sein.
Schon ziemlich sicher ist zum Beispiel auch die Kombination aus zwei Wörterbuch-Wörtern mit einem Sonderzeichen: oma%bleistift
Wörterbuchangriffe kennen "oma" und "bleistift". Und vielleicht noch 10.000 andere Wörter, die man verwenden kann.
10.000 mal 10.000 mal 10 Sonderzeichen (da finden sich bestimmt noch mehr) ergibt schon 1.000.000.000 (eine Milliarde) verschiedene Kombinationen.
8 beliebige Buchstaben hintereinander sind 26^8 Kombinationen: 208.827.064.576 (209 Milliarden). Hm, nicht wirklich wahnsinnig viel mehr - und die Wörterbücher haben sicherlich nicht nur 10.000 Einträge, sondern eher 100.000 (Macht nach obigem Schema dann 100 Milliarden Kombinationen). Und wenn man dann noch zwischen den Sprachen mischt, gibts wieder eine Dimension mehr.
aber noch sicher etwa so:
o+ma-9hi lde
Jedes zusätzliche Zeichen erhöht die Sicherheit (zumindest bis zu einem gewissen Grenzwert, denn es gibt bei den üblichen Hash-Algorithmen natürlich Kollisionen: Verschiedene Paßwörter ergeben den gleichen Hashwert).
Ich denke, daß sich jemand sowas merken kann. Aber einem Angreifer bieten sich mit der Info "1 Ziffer, 2 Sonder- und 1 Leerzeichen" schon recht viele Kombinationen, vorausgesetzt, er erfährt das!
Derwegen hält man seine Paßworte ja auch geheim - zumindest versucht man es. :) In diesem Zusammenhang finde ich es sehr schön, daß Web.de das Webinterface UND den POP3-Zugang SSL-verschlüsselt anbietet. :) Nur mal so als Anmerkung.
- Sven Rautenberg
Hallo,
ok ok, das Leerzeichen scheint evtl. Sinn zu machen. Vermeiden wollte ich nur, daß ein einzelnes Leerzeichen als Passwort eingegeben wird.
Aber trotzdem, so ganz geht'S mir noch nicht ein. Passwörter sind doch in der Regeld case sensitive, d.h. wir habe (mit Umlauten) 58 Zeichen. Wenn wir jetzt noch sagen wir 10 Sonderzeichen hinzunehmen sind wir bei 68 möglichen Zeichen. Mit einer Mindestlänge von 5 Zeichen sind wir also bei 68^5 = 1,4*10^9 Möglichen, mit Leerzeichen bei 1,5*10^9 Möglichkeiten. Der Unterschied ist also relativ (zur Gesamtzahl) gering, oder?
Und zum Thema merken von Passwörter: Hab schon öfters gelesen, daß man einen Satz verstümmeln soll. Zum Beispiel ein "Meine Oma wohnt in Berlin. Eine tolle Stadt!" Zu: "MOwiB.EtS!" (immer erster Buchstabe + Sonderzeichen. Und das geht ganz einfach ohne Leerzeichen.
Grüße aus Würzburg
Julian
Moin!
Aber trotzdem, so ganz geht'S mir noch nicht ein. Passwörter sind doch in der Regeld case sensitive, d.h. wir habe (mit Umlauten) 58 Zeichen. Wenn wir jetzt noch sagen wir 10 Sonderzeichen hinzunehmen sind wir bei 68 möglichen Zeichen. Mit einer Mindestlänge von 5 Zeichen sind wir also bei 68^5 = 1,4*10^9 Möglichen, mit Leerzeichen bei 1,5*10^9 Möglichkeiten. Der Unterschied ist also relativ (zur Gesamtzahl) gering, oder?
Im Prinzip richtig. Wenn man dann noch dazunimmt, daß die Leertaste oftmals ein anderes Geräusch macht, als die restlichen Tasten (man also auch hören kann, daß Leerzeichen im Paßwort sind), dann ist das Leerzeichen als zulässiges Zeichen uninteressant. Nur ausschließen sollte man es nicht unbedingt. :)
Und zum Thema merken von Passwörter: Hab schon öfters gelesen, daß man einen Satz verstümmeln soll. Zum Beispiel ein "Meine Oma wohnt in Berlin. Eine tolle Stadt!" Zu: "MOwiB.EtS!" (immer erster Buchstabe + Sonderzeichen. Und das geht ganz einfach ohne Leerzeichen.
Richtig. So einen Satz hatte ich auchmal gebildet - als Passphrase für einen PGP-Schlüssel. Und dann vergessen. ;) Dumm gelaufen, aber der Schlüssel war nicht veröffentlicht worden, also nur intern dumm gelaufen.
Ich habe merkwürdigerweise keinerlei Probleme, mir zufällig generierte Passwörter zu merken. Muß die nur häufig genug selbst nutzen. Und für alle selten benutzte Paßwörter gibt es Möglichkeiten, diese verschlüsselt zu speichern (mit einem Paßwort, welches man sich merken kann) und bei Bedarf nachzugucken. :)
- Sven Rautenberg
Moin,
wollte nur noch anmerken, daß Wörterbuchangriffe in der Regel nicht via telnet oder rlogin laufen. Vielmehr beschäftigt sich ein Angreifer damit, an die Passwort-Datei zu gelangen, um gegen diese direkt den Angriff zu starten. Damit wird nämlich erreicht, daß die Sekunde, die der Login-Dienst bis zur nächsten Eingabemöglichkeit wartet, wegfällt.
Gelangt also einer an die Passwort-datei, ist es nur noch eine Frage seiner Resourcen, wie schnell Wörterbuchangriffe Erfolg haben, sofern sie denn erfolgreich sein können.
Natürlich ist dann ein Paßwort wie:
oma%bleistift
wieder recht leicht zu finden. Jedoch wird kaum ein Wörterbuchalgorithmus das Sonderzeichen innerhalb der Wörter suchen, z.B.:
omabl%eistift
Allein die Tatsache, daß das Sonderzeichen nun nicht mehr zwischen den beiden Wörtern sitzt, sondern mitten in einem der beiden wörter und ein Wortteil am anderen Wort hängt vervielfacht die Anzahl der denkbaren Möglichkeiten schon wieder.
26 Kleinbuchstaben + 26 Großbuchstaben + äöüßÄÖÜ + 10 Ziffern + 10 Sonderzeichen macht alleine 79 Zeichen, so. Plus Leertaste macht 80 Zeichen.
100.000 Wörter * 100.000 Wörter * 10 Sonderz. = 1*10^11
100.000 Wörter * 100.000 Wörter * 10 Sonderz. * (angenommene)10 versch. Positionen, an denen es stehen kann = 1 * 10^12
Und wieso hashing, das ist doch Beschmu! Besser wäre doch, wenn der Verschlüsseler das Paßwort z.B. auf eine Länge von X Zeichen mit z.B. Leerzeichen auffüllt und dann erst verschlüsselt, anstatt es mit nem Hashing zu kürzen.
Übrigens: Braucht eine Rechentechnik vielleicht 1 Monat pro Durchlauf für 10^11 Kombi's, dann braucht sie für 10^12 Kombi's 10 Monate. Ich finde, daß das ein riesiger Unterschied ist. Oder man setzt die 10fache Menge der Technik ein. Aber irgendwann lohnt der Aufwand nicht mehr.
Hat der Angreifer höhere Kosten, als das Angriffsziel (z.B. Spionage) wert ist, dann gilt diese Sache ausreichend geschützt - aus meiner Sicht.
Gruß
Andreas
Moin
Und wieso hashing, das ist doch Beschmu! Besser wäre doch, wenn der Verschlüsseler das Paßwort z.B. auf eine Länge von X Zeichen mit z.B. Leerzeichen auffüllt und dann erst verschlüsselt, anstatt es mit nem Hashing zu kürzen.
Weil das schöne an einem guten Hash ist, dass ein Wörterbuchangriff oder gar Brute Force der einzige Angriffsweg ist.
Wenn du die Passwörter einfach nur symmetrisch verschlüsselst, kann sich der Angreifer auf den Verschlüsselungsalgorithmus (da gibt es solche und solche :) oder den verwendeteten Schlüssel konzentrieren, was die Angriffschancen dramatisch erhöhen kann.
Außerdem: Wenn der Angreifer an die verschlüsselten Passwörter kommt, kommt er in der Regel auch trivial an den verwendeten Schlüssel und kann sich den Angriff sparen.
Bei einem gehashten Passwort hingegeben gibt es keine (bekannte) Möglichkeit an das Passwort zu kommen, nicht mal für den Besitzer der Maschine.
--
Henryk Plötz
Grüße aus Berlin
Hallo Henryk,
so rum war das doch nicht gemeint. Natürlich sollen Paßwörter schön Einweg-verschlüsselt werden. Aber unter einem Hashing verstehe ich auch ein Zusammenfassen. So hat hier ja auch einer geschrieben, daß ab einer gewissen Länge sich der Schutz nicht mehr erhöhen läßt - eben wegen diesem Hashing. Das kann doch nicht sein, daß ich an der Uni mir ein Paßwort aus 12 Zeichen gegeben habe und ich mich anschließend mit Hilfe der ersten 8 Zeichen wieder einloggen konnte.
Andersrum kann es doch auch nicht sein, daß ein Paßwort
dgR5W4i85Tw3 (12 Zeichen)
auf 8 Zeichen runterverschlüsselt wird und es damit natürlich ein 8 Zeichen langes Passwort gibt, welches anstelle des 12 Zeichen - langen genommen werden kann, also z.B.
t74eSS35
weil beide die gleiche Hashsumme von z.B. (alles jetzt frei erfunden)
55gh8z67
ergeben.
Deshalb würde ich sagen, daß die Paßwortlänge auf z.B. 32 Zeichen angehoben werden sollte. Und die Einweg-verschlüsselten Paßwörter sollen natürlich auch 32 Byte lang sein - logisch. Nur dann machen doch Überlegungen wieder Sinn, das Brutforces einfach zu lange dauern, egal wie schnell die Rechentechnik wird. Dann verlängern wir eben nochmal, wie bei den Schlüsselpaaren der asynchronen Verschlüsselung (Stichwort: PGP, digitale Signatur, etc.: erst 512 Byte, dann 1024, 2048 und glaube auch schon 4096 Byte lang.
sichere Grüße
Andreas
Moin
so rum war das doch nicht gemeint. Natürlich sollen Paßwörter schön Einweg-verschlüsselt werden. Aber unter einem Hashing verstehe ich auch ein Zusammenfassen. So hat hier ja auch einer geschrieben, daß ab einer gewissen Länge sich der Schutz nicht mehr erhöhen läßt - eben wegen diesem Hashing. Das kann doch nicht sein, daß ich an der Uni mir ein Paßwort aus 12 Zeichen gegeben habe und ich mich anschließend mit Hilfe der ersten 8 Zeichen wieder einloggen konnte.
*g* Deswegen habe ich in weiser Voraussicht beim nochmaligen Durchlesen meines Posts das "gut" vor Hash eingefügt. Die 8 Zeichen auf die du dich beziehst stammen vom alterwürdigen crypt() und das ist schon lange nicht mehr gut. Deswegen will man auch MD5 benutzen. Das erzeugt a) 128 Bit Hashsummen, das heisst es gibt höchsten 2^128 verschiedene Hashes, und demzufolge braucht man auch maximal 2^128 verschiedene Passwörter (mit unterschiedlichen Hashes) ausprobieren, aber eben auch nicht weniger, und 340282366920938463463374607431768211456 ist schon eine ziemlich große Zahl :) und b) jedes Bit des Ausgangstextes geht in den Hash mit ein, also einfach das Passwort irgendwo abschneiden ist nicht drin. Wenn man dann auch noch einen selbstvergebenen festen oder zumindest bekannten String (zum Beispiel der username dem das Passwort gehört) mithasht, bringt es dem Angreifer auch nichts, wenn er mit einem Wörterbuch kommt, in dem lauter Hashes und ein dazu passendes Kennwort steht.
--
Henryk Plötz
Grüße aus Berlin
Moin
Aha, dann kann ich ja jetzt beruhigt schlafen gehen *g*
Grüße nach Berlin (aus Erfurt)
Andreas Schigold
Hi!
Ja, gut gesehen, aber das hat auch nichts geändert, hatte das nur kurzfristig umgeschrieben von if (isset($xy))
dummerweise habe ich dadurch die Logik umgekehrt. Nun ja, aber auch diese Erkenntnis hat es nicht gebracht, ich habe a Probleme mit der Session, siehe Thread weiter oben.
Und zu den Passwörtern, ich weiß ja nicht was Ihr alle wichtiges zu schützen habt, vielleicht sollte man einfach die ersten 3 Seiten der Bedienungsanleitung seines Videorekorders auf Polnisch eingeben, am besten eben schnell noch jedes Wort einzelnd MD5 verschlüsselt... wenn es doch ein paar Millionen, vielleicht sogar Milliarden Möglichkeiten gibt bei einem stinknormalen Passwort gibt, wer soll das denn rausbekommen? Jedenfalls habe ich keine Daten, die einen deratigen Aufwand rechtfertigen würden.
Wenn ich nur das normale Alphabet benutze gibt es für ein 5 stelliges Passwort bereits 15 Mio Möglichkeiten, wenn man sich nicht gerade eines dieser typischen von den Listen merkt dauert das z.B. mit Brute-Force 2-3 Monate, wenn man mal 1 Versuch pro Sekunde rechnet!
Grüsse
Andreas