Passwortvergleich soll "case sensitve" sein
Leo
- php
Hallo zusammen,
wende mich mit folgenden Problem an euch;
In meiner DB werden Passwörter, mit hilfe eines scriptes erzeugt, abgespeichert. Diese Passwörter besteht aus Ziffern, Klein- und Großbuchstaben. Mit einem Vergleich des abgespeicherten Passworts in der DB und ein vom User (auf einer website) eingegebenen Passwort soll eine Änderung in meiner DB gestattet werden. Bis hierher funktioniert auch alles. Jedoch wird der Unterschied zwischen Großbuchstaben und Kleinbuchstaben vollkommen ignoriert. Beispiel: für das Passwort "kfBmtssza1" könnte man auch "KFbMTSSZA1" eingeben. Habt ihr einen Vorschlag, wie ich meine Passwortabfrage case sensitve gestalten kann?
Danke schon mal jetzt, Leo
Ja die Frage ist eher, an welcher Stelle du eine case-ignorante Funktion definiert hast.
PS: dein Text erinnert irgendwie an proprietäre Passwortmethoden.
mfg Beat
Danke euch allen, habe das Problem gelöst.
Der Tipp mit dem binary war genau das, was ich brauchte!
Mal ganz nebenbei, ich bin positiv überrascht wie schnell einem hier geholfen wird. Spitzenklasse von euch!!!
Hallo Leo,
In meiner DB werden Passwörter, mit hilfe eines scriptes erzeugt, abgespeichert. Diese Passwörter besteht aus Ziffern, Klein- und Großbuchstaben. Mit einem Vergleich des abgespeicherten Passworts in der DB und ein vom User (auf einer website) eingegebenen Passwort soll eine Änderung in meiner DB gestattet werden.
warum speicherst Du Klartextpasswörter?
Bis hierher funktioniert auch alles. Jedoch wird der Unterschied zwischen Großbuchstaben und Kleinbuchstaben vollkommen ignoriert. Beispiel: für das Passwort "kfBmtssza1" könnte man auch "KFbMTSSZA1" eingeben. Habt ihr einen Vorschlag, wie ich meine Passwortabfrage case sensitve gestalten kann?
Wenn Du unbedingt Klartextpasswörter speichern willst, dann nutze die entsprechende Funktionalität Deines Datenbankmanagementsystems (DBMS). Sicher hat es dazu etwas zu bieten. Hättest Du angegeben, welches DBMS Du verwendest, könnte man Dir konkreter helfen.
Freundliche Grüße
Vinzenz
Jedoch wird der Unterschied zwischen Großbuchstaben und Kleinbuchstaben vollkommen ignoriert. Beispiel: für das Passwort "kfBmtssza1" könnte man auch "KFbMTSSZA1" eingeben. Habt ihr einen Vorschlag, wie ich meine Passwortabfrage case sensitve gestalten kann?
Das steht in der Bedienungsanleitung deiner Datenbank (deren Name du leider nicht verraten hast). Falls du MySQL benutzt, kannst du LIKE BINARY verwenden, damit zwischen Groß- und Kleinschreibung unterschieden wird.
Davon unabhängig wird üblicherweise nicht das Passwort selbst gespeichert, sondern eine Prüfsumme (md5 oder sha1, zumeist wird das Passwort noch mit einem Zufallswert erweitert, um Rainbow-Angriffe zu verhindern). Selbst wenn jemand ungefugt Zugriff erlangt, bekommt er somit keine Klartextpasswörter, sondern nur nutzlose Prüfsummen, was sich als klug erweist, verwenden die Benutzer das gleiche Passwort für verschiedene Dienste.
echo $begrüßung;
Falls du MySQL benutzt, kannst du LIKE BINARY verwenden, damit zwischen Groß- und Kleinschreibung unterschieden wird.
Einen Mustervergleichsoperator wie LIKE möchte man nicht zum Passwortvergleich verwenden. Da wird ein genauer Vergleich benötigt. Das BINARY steht auch in keiner besonderen Beziehung zu LIKE sondern ist ein eigenständiger Operator um das nachfolgende Argument als case-sensitive zu kennzeichnen. Man könnte alternativ auch die Passwort-Spalte mit case-sensitiver Kollation versehen, dann löst sich das Problem auch ohne extra Operatoren in Wohlgefallen auf.
echo "$verabschiedung $name";
Falls du MySQL benutzt, kannst du LIKE BINARY verwenden, damit zwischen Groß- und Kleinschreibung unterschieden wird.
Einen Mustervergleichsoperator wie LIKE möchte man nicht zum Passwortvergleich verwenden. Da wird ein genauer Vergleich benötigt.
Es ist nicht so, dass Platzhalter eingesetzt werden müssten. Insofern ist die implizierte Behauptung, mit LIKE sei kein genauer Vergleich möglich, falsch.
echo $begrüßung;
Falls du MySQL benutzt, kannst du LIKE BINARY verwenden, damit zwischen Groß- und Kleinschreibung unterschieden wird.
Einen Mustervergleichsoperator wie LIKE möchte man nicht zum Passwortvergleich verwenden. Da wird ein genauer Vergleich benötigt.
Es ist nicht so, dass Platzhalter eingesetzt werden müssten. Insofern ist die implizierte Behauptung, mit LIKE sei kein genauer Vergleich möglich, falsch.
Wenn du LIKE gleichberechtigt zu = verwenden willst, musst du aktiv verhindern, dass Anwender Platzhalterzeichen in Passwörtern verwenden, bzw. diese Platzhalterzeichen entschärfen.
WHERE passwort LIKE '$benutzereingabe'
Wenn in $benutzereingabe ein % steht ergibt sich
WHERE passwort LIKE '%'
Unkritisch ist hingegen
WHERE passwort = '%'
Selbst wenn du die Parameter vertauschst verbleibt eine Sicherheitslücke
WHERE '$benutzereingabe' LIKE passwort
wenn es dem Anwender gelang, ein Passwort mit % oder _ einzutragen, wobei sich diese "nur" auf eine Kennung erstreckt und nicht auf alle.
Weggelassen habe ich oben die kontextgerechte Maskierung der Werte. Die ist zwar prinzipell notwendig, verhindert aber das Platzhalterproblem nicht.
echo "$verabschiedung $name";
Hi!
was ich an deinem Problkem nicht verstehe:
Seit wann ist denn bei php eingegebenesPW == datenbankPW nicht casesensitive?
Seit wann ist denn bei php eingegebenesPW == datenbankPW nicht casesensitive?
bzw wenn man passwörter als hash hinterlegt kommt bei unterschiedlicher gross/kleinschreibung ohnehin ein anderer hash raus - passwörter hashen ist zwar nicht 100%ig sicher, aber immerhin wesentlich sicherer als passwörter im klartext zu hinterlegen