sql注入
sql注入问题产生的原因
1.sql语句的拼接
2.and or优先级产生的问题
eg:
select * from t_user where username = 'aaa'or'1=1' and password = 'sfsdfsds';
在该sql语句中,and优先级高于or,就会优先执行'1=1' and password='sfsdfsds' 结果为false,此时如果知道对应的username,产生的结果就是'aaa' or false 也就是true
解决sql注入问题
* 使用PreparedStatement接口,是Statement的子接口。
* 能执行SQL语句
* 产生预编译SQL语句的功能,解决SQL注入漏洞。
* 有预编译的功能,把SQL语句中的参数的部分使用?(占位符)来代替,可以先把编写的SQL语句先发送到 MySQL服务器端,对这条SQL语句进行编译,
* 编译后的SQL语句的格式就是固定的了,再传入任何的值,都会做?的参数来出现。
* 掌握的方法
* Connection接口提供方法,conn.prepareStatement(String sql) ‐‐ 预编译SQL语句
* 通过PreparedStatement向?传入值
* setInt(第一个参数:?的位置,默认从1开始,第二个参数:?号对应的值)
* setString()
* setXxxx()
* setObject()
* 执行SQL语句的方法
* executeQuery() ‐‐ 执行查询,但是没有参数
* executeUpdate() ‐‐ 执行增删改,没有参数的

浙公网安备 33010602011771号