Mysql
 sql >> Base de données >  >> RDS >> Mysql

PHP / MySQLi :Comment empêcher l'injection SQL sur INSERT (code fonctionnant partiellement)

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 !