Maison >base de données >tutoriel mysql >Pourquoi la précompilation peut empêcher l'injection SQL
La raison pour laquelle la précompilation peut empêcher l'injection SQL : après la précompilation, l'instruction SQL a été analysée, compilée et optimisée par la base de données, et la base de données peut être interrogée sous forme paramétrée, donc même s'il y a des caractères sensibles, le la base de données les traitera comme des attributs. Les valeurs sont traitées à la place des instructions SQL
Comme nous le savons tous, il existe une fonction de prétraitement dans JDBC en Java. L'un des avantages majeurs. L'un des avantages de cette fonction est qu'elle peut améliorer la vitesse d'exécution, notamment lors de l'utilisation répétée de la base de données. Un autre avantage est d'empêcher l'injection SQL. À proprement parler, elle devrait empêcher la grande majorité des injections SQL. L'utilisation de
est la suivante :
String sql="update cz_zj_directpayment dp"+ "set dp.projectid = ? where dp.payid= ?"; try { PreparedStatement pset_f = conn.prepareStatement(sql); pset_f.setString(1,inds[j]); pset_f.setString(2,id); pset_f.executeUpdate(sql_update); }catch(Exception e){ //e.printStackTrace(); logger.error(e.message()); }
Alors pourquoi peut-il empêcher l'injection SQL et améliorer la sécurité en le traitant comme ceci ? En fait, cela est dû au fait que l'instruction SQL a été précompilée avant l'exécution du programme. Avant la première utilisation de la base de données lors de l'exécution du programme, l'instruction SQL a été analysée, compilée et optimisée par la base de données. plan sera également mis en cache et permettra à la base de données d'utiliser les paramètres. Requête sous une forme standardisée. Lorsque les paramètres sont transmis dynamiquement à PreprareStatement au moment de l'exécution, même s'il y a des caractères sensibles dans les paramètres tels que « 1 = 1 », la base de données le fera. traitez-le comme un paramètre et une valeur d'attribut de champ au lieu d'un SQL. La commande joue ainsi le rôle d'injection SQL !
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!