总结-SQL注入

余生颓废 提交于 2020-02-12 20:48:47

SQL注入:输入用户名和密码的时候带有SQL语句的关键字,会导致SQL注入;

用户是一个专业程序员,输入用户名和密码的时候,这些信息中包含了SQL语句的关键字,并且这些关键字参与了编译过程,导致原SQL语句含义被扭曲;

SQL注入是存在的一种安全隐患

怎么解决SQL注入问题( 导致SQL的根本原因是什么 )?

原因是先进行字符串拼接再进行的编译导,正好将用户提供的含有SQL语句关键字的字符串编译进去,从而导致了SQL语句的原意,SQL注入;

解决办法:

(第一版) -- 先体统SQL语句架构,SQL语句框架进行预先编译,再给SQL语句框架进行赋值,这样即使用户提供的信息中含有SQL语句的关键字,但是这些关键字并不会参与编译,不起作用,解决SQL注入问题.

(第二版) -- java.sql.PreparedStatement (预编译的数据库操作对象)

PreparedStatement 的父接口 :Statement

执行原理 : 先提供SQL语句框架,再使用预编译的数据库操作对象进行SQL语句的预先编译,再给SQL语句框架传值,传值的时候用户输入的信息中即使有SQL语句的关键字也不会参与编译,不会扭曲远SQL语句的含义;

String sql = ‘select * from u_user where userName = ? and passWord = ?’;

框架SQL语句,只有一个架子没有具体的值,每一个 ? 都是一个占位符,第一个占位符的下标是1,第二个占位符的下标是2

PrepareStatement ps = xxx.preparestatement(sql);

将上面的SQL框架语句进行预先编译

Ps.setString(1,username); //给占位符赋值

Ps.setString(2,password); //给占位符赋值

总结 : Statement PreparedStatement对比

Statement存在SQL注入问题,PreparedStatement可以避免

PreparedStatement使用较多

当有些系统需要SQL注入的时候就选择statement

StatementPreparedStatement效率比较

Statement特点是编译一次执行一次,编译n次执行n

PreparedStatement特点是编译一次,执行n

PreparedStatement速度要优于statement

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!