Die "normale" Methode, AFAIK, besteht darin, die Funktion addslashes() zu verwenden.
z.B .:
$hash = hash('sha1', $username . $salt . $password, true);
$query_safe_hash = addslashes($hash);
$query_safe_username = addslashes($username);
$query = "INSERT INTO DBTable(username, password) VALUES ('$query_safe_username', '$query_safe_hash')";
mysql_query($query) or die("Failed to store credentials!");
Randbemerkung: von einem Krypto-Best Practices Standpunkt sollte das Salz eine bekannte Länge sein, sollte zufällig generiert werden, und vorangestellt Ihre Hash vor in der Datenbank gespeichert werden. So etwas wie
$salt = generate_random_salt();
$query_safe_hash = addslashes($salt) . addslashes(hash('sha1', $salt . $username . $password, true);
Dann Anmeldeinformationen des Benutzers, um zu überprüfen, Sie rufen Sie den gespeicherten Hash, entfernen Sie den Hiebe und Streifen die bekannten Salz Länge vom Anfang des gespeicherten Hash und verwendet das gleiche Salz mit einem Hash-Wert der erzeugen Anmeldeinformationen zur Verfügung gestellt, dann vergleichen. Dies hilft, Ihren Hash-Algorithmus gegen verschiedene Kryptoanalyseangriffe (insbesondere differenzielle Kryptoanalyse) zu verhärten.
Korrektur: das Salz muss keine bekannte Länge sein, aber wenn es nicht ist, müssen Sie eine Möglichkeit bereitstellen, es vom Rest des Hashs abzugrenzen. Zum Beispiel, trennen Sie sie durch einen Doppelpunkt oder ein anderes Zeichen, das nicht von Ihrem Hashing Algo erzeugt wird. Das ist potentiell problematisch, wenn Ihr Algorithmus willkürliche Binärdaten erzeugt und Sie nicht die Entropie opfern wollen, also ist die Verwendung eines Salzes bekannter Länge meine bevorzugte Methode. – Dathan
addslashes() schützt nur vor einer Handvoll der vielen SQL-Injection-Methoden. Verwenden Sie vorbereitete Anweisungen oder zumindest mysql_real_escape_string(). –