Maison >base de données >tutoriel mysql >Comment PreparedStatements peut-il protéger les applications Java contre les attaques par injection SQL ?
Prévention des injections SQL dans les programmes Java
La prévention des attaques par injection SQL est cruciale dans les programmes Java qui interagissent avec les bases de données. Une attaque par injection SQL se produit lorsqu'une entrée non fiable est insérée dans une requête SQL, permettant aux attaquants d'exécuter du code malveillant ou de manipuler des données.
Considérez le code Java suivant qui insère des données dans une table de base de données :
String insert = "INSERT INTO customer(name,address,email) VALUES('" + name + "','" + addre + "','" + email + "');";
Ce code est vulnérable aux attaques par injection SQL car les valeurs sont directement interpolées dans la requête. Par exemple, un attaquant pourrait saisir la chaîne suivante comme nom :
DROP TABLE customer;
Cela entraînerait la suppression de l'intégralité de la table customer.
Pour empêcher cette attaque, utilisez PreparedStatement. Les objets PreparedStatement utilisent des espaces réservés pour les paramètres de requête, qui sont ensuite renseignés ultérieurement. Cette séparation empêche les entrées non fiables d'être directement interpolées dans la requête.
Le code suivant démontre l'utilisation de PreparedStatement :
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();
Ce code est protégé de l'injection SQL car les valeurs sont définies séparément. de la requête. Les attaquants ne peuvent plus modifier l'intention de la requête en insérant une entrée malveillante.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!