Dans le Nouveau code PHP extrait, vous êtes toujours vulnérable aux injections.
Vous utilisez une déclaration préparée dans la partie encart, mais vous n'utilisez pas correctement les dosages des préparations.
Lors de la création d'une instruction préparée, vous créez une requête dans laquelle vous ajoutez des espaces réservés au lieu des valeurs brutes :
$stmt = $conn->prepare("INSERT INTO Users (email, pw) VALUES (?, ?)");
Les points d'interrogation sont les espaces réservés et sont ensuite remplacés en utilisant le bind_param
méthode :
$stmt->bind_param('ss', $email, $pw);
Le ss
une partie de l'appel de liaison indique à la base de données mysql que ses deux chaînes sont transmises à la base de données (s pour string
, je pour int
etc).
Vous liez un paramètre ($name
) mais il n'a pas d'espace réservé ni aucun type de référence dans la requête..?
Votre instruction select, d'autre part, est toujours dangereuse et sujette à des vulnérabilités.
J'utiliserais probablement une instruction préparée, tout comme avec la partie insert.
Vous voulez toujours vous assurer que l'entrée de l'utilisateur est "sûre" pour la base de données, si vous concaténer une chaîne de requête et y ajouter une entrée utilisateur, la base de données n'échappera pas aux chaînes, elle l'exécutera simplement.
Utilisez uniquement une query
standard appels de méthode lorsque vous écrivez vous-même la requête complète, sans aucun paramètre d'entrée, et surtout aucun paramètre d'entrée passé par l'utilisateur !