Maison > Questions et réponses > le corps du texte
Je dois ajouter une instruction à mon programme Java pour mettre à jour la table de la base de données :
String insert = "INSERT INTO customer(name,address,email) VALUES('" + name + "','" + addre + "','" + email + "');";
J'ai entendu dire que cela pouvait être exploité via une injection SQL, par exemple :
DROP TABLE customer;
Mon programme a une interface graphique Java et toutes les valeurs de nom, d'adresse et d'e-mail sont ajoutées de Jtextfields
检索。我想知道黑如何将以下代码(DROP TABLE customer;
) à mon instruction d'insertion et comment puis-je empêcher cela.
P粉1949190822023-10-21 12:11:28
Par exemple :
name = "'); DROP TABLE customer; --"
insérera cette valeur dans insert :
INSERT INTO customer(name,address,email) VALUES(''); DROP TABLE customer; --"','"+addre+"','"+email+"');
Utilisez des instructions préparées et des paramètres SQL (exemple "voler" de Matt Fellows) :
String insert = "INSERT INTO customer(name,address,email) VALUES(?, ?, ?);"; PreparedStament ps = connection.prepareStatment(insert);
Analysez également les valeurs de ces variables et assurez-vous qu'elles ne contiennent aucun caractère non autorisé (tel que ";" dans le nom).
P粉0304790542023-10-21 09:25:32
Vous devez utiliser PreparedStatement. Par exemple
String insert = "INSERT INTO customer(name,address,email) VALUES(?, ?, ?);"; PreparedStatement ps = connection.prepareStatement(insert); ps.setString(1, name); ps.setString(2, addre); ps.setString(3, email); ResultSet rs = ps.executeQuery();
Cela empêchera les attaques par injection.
La façon dont un pirate informatique l'insère est si la chaîne que vous insérez provient d'une entrée quelque part - comme un champ de saisie sur une page Web ou un champ de saisie sur un formulaire dans une application ou similaire.