1、注入
SQL注入:程序向后台数据库传递SQL时,用户提交的数据直接拼接到SQL语句中并执行,从而导入SQL注入攻击。
字符型注入:黑色部分为拼接的问题参数
select * from t_user where name='test' or '1' = '1';
数字型注入:黑色部分为拼接的问题参数(对于强类型语言,字符串转int类型会抛异常。所以这种注入方式一般出现在php等弱类型语言上。
select * from t_user where id=1;drop table t_userinfo;
搜索型注入:对表名进行猜测
select * from t_user where userName like ‘%test%' and 1=2 union select 1,2 from t_admin';
修复方法:
a、在mybatis中使用#把参数当做一个字符串,不能使用$符号
b、在JDBC中使用预编译的方式对参数进行绑定,详细如下:
String userName = request.getParameter("userName");
String sql = "select * from t_user where userName = ?";
JdbcConnection conn = new JdbcConnection();
PreparedStatement pstmt = conn.preparedStatement(sql);
pstmt.setString(1,userName);