Maison  >  Article  >  base de données  >  Pourquoi la précompilation peut empêcher l'injection SQL

Pourquoi la précompilation peut empêcher l'injection SQL

清浅
清浅original
2019-05-11 14:55:575938parcourir

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

Pourquoi la précompilation peut empêcher l'injection 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn