Formulareingaben überprüfen

nchristoph

Erfahrenes Mitglied
Hallo zusammen,

wie validiere ich am besten Formulareingaben bevor ich die Daten in die Datenbank übergebe?

Da ich PDO für die Datenbank benutze stellt sich für mich auch die Frage, ob bindValue schon genügt oder ob ich noch was beachten muss/sollte?

mfg
Christoph
 
Hi

vorausgesetzt es wird überall ein sinnvoller Zeichensatz verwendet (zB. UTF8) reicht das, um SQL-Injections zu verhindern.

Beim Auslesen und Ausgeben zum Browser hin ist (je nach möglichem Inhalt) zb. htmlcpecialchars trotzdem noch nötig.

Andere Validierungen, zB. ob die Eingabe eine mögliche Mailadresse ist usw.usw. muss man natürlich auch noch machen, falls gewünscht.
 
Soll man beim Zeichensatz den auch im Formular erzwingen?

Sonst ist alles UTF-8.

Wie speichert man heute eigentlich Passwörter in der DB? Nach wie vor mit MD5() und Salten oder AES256 oder komplett anders?

mfg
Christoph
 
MD5 wird schon ein paar Jahre nicht mehr empfohlen, da es doch zu leicht zu Kollisionen kommen kann.

Momentan ist im Bereich PHP die Funktion password_hash so die "Standard Verschlüsselungs"-Funktion.
Mit dem Algorithmus Variable kann die Hash Variante bestimmt werden, der Standard ist momentan BCrypt (über die Kontstante PASSWORD_DEFAULT).

http://php.net/manual/de/function.password-hash.php
 
edit: Langsam ... aber überschneidet sich nicht komplett

Soll man beim Zeichensatz den auch im Formular erzwingen?
Wo genau willst du da (bei HTML-form-Tags) was erzwingen?

Wie speichert man heute eigentlich Passwörter in der DB? Nach wie vor mit MD5() und Salten oder AES256 oder komplett anders?
Weder noch.

MD5 ist, je nach dem wie und wofür es eingesetzt wird, entweder komplett gebrochen oder zumindest fragwürdig.

AES (egal mit welcher Keygröße) ist ein Verschlüsselungsverfahren, kein Hash. Um das für Passwörter in der DB zu verwenden müsste auch der Key irgendwo für das Programm erreichbar sein (zB. auch in der DB) ... und damit ist der ganze Schutz sinnlos.

Entweder SHA2/3 zusammen mit PBKDF2 nehmen (nicht allein), oder bcrypt/scrypt.
 
Hab das so gemeint.
HTML:
<form action="demo_form.asp" accept-charset="UTF-8">

Danke für den Link. Ich hab mir den gerade mal angesehen.

Wie prüft man dabei ob das eingegebene Passwort und das abgespeicherte übereinstimmen?

PHP:
if($row['password'] == password_hash($_POST['userpass'], PASSWORD_DEFAULT)){
//machwas
}

Oder anders?
 
Danke für den Link. Ich hab mir den gerade mal angesehen.

Wie prüft man dabei ob das eingegebene Passwort und das abgespeicherte übereinstimmen?

PHP:
if($row['password'] == password_hash($_POST['userpass'], PASSWORD_DEFAULT)){
//machwas
}

Oder anders?

Genauso, da es ein Hash ist und somit nicht bzw. nur sehr schwer umkehrbar ist bleibt einen nichts anderes übrig, als die Hashwerte zu vergleichen.
 
Also mit meinem Beispiel funktioniert es schon mal nicht weil sich der Hash beim generieren jedes mal ändert.

password_verify hilft allerdings.
PHP:
if(password_verify($pass, $test1)){
    echo "test1";
}else{
    echo "test2";
}
 
Zurück