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

著名的sql注入问题-问题的原因分析及总结

时间:2016-12-02 13:42:27      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:返回   dstat   连续   sql   字符串   能力   user   动态   占位符   

###**Statement安全漏洞(sql注入问题)**
**产生原因:**
因为SQL语句拼接,传入了SQL语句的关键字,绕过了安全检查.
客户端利用JDBC-【Statement】的缺点,传入非法的参数,从而让JDBC返回不合法的值,我们将这种情况下,统称为SQL注入。
**解决方案:**
使用PreparedStatement对象就可以解决。PreparedStatement对象预处理对象。允许使用占位符对SQL语句中的变量进行占位。对SQL语句进行预先编译。传入SQL语句的关键字,不会被当成关键字而是普通的字符串。包括:程序执行时动态为?符号设置值,安全检查,避免SQL注入问题,预处理能力
select * from user where username = ? and password = ?
**Statement与PreparedStatement的区别**
现在项目中都不直接用Statement了,而用PreparedStatement。
PreparedStatement它除了具有Statement是所有功能外,
还有动态SQL处理能力,包括:程序执行时动态为?符号设置值,安全检查,避免SQL注入问题,预处理能力。

Statement只能处理静态SQL
1,PreparedStatement既能处理静态SQL,又能处理动态SQL,它继承了Statement的特点
2,站在预处理这个角度来说的:
PreparedStatement【适合】做连续多次相同结构的SQL语句,有优势。
Statement【适合】做连续多次不相同结构的SQL语句,有优势。
适合:是只效率会更高,但并不表示一定要这才样
3,PreparedStatement
1_支持动态SQL,也支持静态SQL
2_预处理
---相同结构的SQL
select id,name from users where id = 1
select id,name,gender from users where id = 2;
是不相同结构
---不同结构的SQL
声明:
静态SQL也可以用PreparedStatement
适合:
静态SQL---优先Statement

著名的sql注入问题-问题的原因分析及总结

标签:返回   dstat   连续   sql   字符串   能力   user   动态   占位符   

原文地址:http://www.cnblogs.com/GuoXueLi/p/mysql.html

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