著名的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—优先PreparedStatement

你可能感兴趣的:(Java,web,数据库,sql注入,解决方案,对象,安全)