首页 > 代码库 > 著名的sql注入问题-问题的原因分析及总结
著名的sql注入问题-问题的原因分析及总结
###**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注入问题-问题的原因分析及总结