Encore une fois à la recherche d'aide avec la sécurité PHP et un système de connexion. Vous vous demandez si je l'ai fait correctement ici. Si je n'étais pas assez précis, veuillez demander, Toute aide est grandement appréciée. J'essaie de créer un système de connexion sécurisé, juste à des fins d'apprentissage. voici le code:Utilisez-vous correctement les instructions PDO et les instructions préparées pour une connexion sécurisée?
require("constants.php");
$DBH = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
function createSalt() {
$length = mt_rand(64, 128);
$salt = '';
for ($i = 0; $i < $length; $i++) {
$salt .= chr(mt_rand(33, 255));
}
return $salt;
}
//Salt function created by ircmaxell
function registerNewUser() {
//Check to see if Username Is In Use//
$q = $DBH->prepare("SELECT id FROM users WHERE username = ?");
$username = filter_var($username, FILTER_SANITIZE_STRING);
$data = array($username);
$q->execute($data);
$row = $q->fetch();
if ($row === false) {
//If Username Is Not Already In Use Insert Data//
$hash = hash('sha256', $pass);
$salt = createSalt();
$hash = hash('sha256', $salt . $hash . $pass); //UPDATED
$data = array($username, $hash, $salt);
$qInsert = $DBH->prepare(
"INSERT INTO users (username, password, salt) values (?, ?, ?)"
);
$qInsert->execute($data); //Inserts User Data Into Table//
}
}
Recherche PHP.net, je ne ' t trouve une fonction nommée "canonicalize()" Est-ce une fonction définie par l'utilisateur qui n'est pas incluse dans le code? –
De plus, bind_param() est appelé avec "i" comme variable, mais "i" n'est pas défini dans votre instruction préparée.Vous pouvez simplement passer la variable nom d'utilisateur en tant que tableau de membre unique à l'instruction d'exécution et ignorer le paramètre bind_param(). –
ouais je vois que canonicalize() n'est pas une fonction, je pensais avoir lu que c'était une fonction. Je ne pense pas. merci, quant à la variable, merci pour cela aussi. Je l'édite. Merci pour l'aide! – mcbeav