码迷,mamicode.com
首页 > 数据库 > 详细

java中预处理PrepareStatement为什么能起到防止SQL注入的作用??!!

时间:2015-03-03 10:01:12      阅读:314      评论:0      收藏:0      [点我收藏+]

标签:preparestatement   java中预处理   预处理语句为什么能防止sql注入   预防sql注入   预处理防止sql注入   

       大家都知道,java中JDBC中,有个预处理功能,这个功能一大优势就是能提高执行速度尤其是多次操作数据库的情况,再一个优势就是预防SQL注入,严格的说,应该是预防绝大多数的SQL注入。

       用法就是如下边所示:

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());
}


       那为什么它这样处理就能预防SQL注入提高安全性呢?其实是因为SQL语句在程序运行前已经进行了预编译,在程序运行时第一次操作数据库之前,SQL语句已经被数据库分析,编译和优化,对应的执行计划也会缓存下来并允许数据库已参数化的形式进行查询,当运行时动态地把参数传给PreprareStatement时,即使参数里有敏感字符如 or ‘1=1‘也数据库会作为一个参数一个字段的属性值来处理而不会作为一个SQL指令,如此,就起到了SQL注入的作用了!

转载请注明—作者:Java我人生(陈磊兴)   原文出处:http://blog.csdn.net/chenleixing/article/details/44024095

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

java中预处理PrepareStatement为什么能起到防止SQL注入的作用??!!

标签:preparestatement   java中预处理   预处理语句为什么能防止sql注入   预防sql注入   预处理防止sql注入   

原文地址:http://blog.csdn.net/chenleixing/article/details/44024095

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!