解决关于SQL注入问题,你知道吗?

广告位

3 一.简述 SQL注入:用户输入的内容作为了SQL语句语法的一部分,改变了原有SQL真正的意义。 二.问题还…

3

一.简述

  • SQL注入:用户输入的内容作为了SQL语句语法的一部分,改变了原有SQL真正的意义。

二.问题还原

用户登录。

/* * SQL注入演示 * */ public static void main(String[] args) throws Exception {     //定义用户名和密码(将来从前端页面传递而来)     String username = "admin";     //还原SQL注入     String password = "'or''='";     //1、注册驱动     Class.forName("com.mysql.jdbc.Driver");     //2、获取连接     Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/day02_db", "root", "1234");     //3、获取发送SQL语句对象     Statement st = con.createStatement();     //4、发送SQL语句,返回结果集     String sql = "select * from user where username = '"+username+"' and password = '"+password+"'";     System.out.println(sql);     ResultSet rs = st.executeQuery(sql);     while(rs.next()){         System.out.println("username:"+rs.getString("username")+"t password:"+rs.getString("password"));     }     //5、关闭资源     rs.close();     st.close();     con.close(); }

解决关于SQL注入问题,你知道吗?

三.问题解决

解决根本:  把用户输入中的特殊字符,尤其是 ‘ 去掉。

  • 解决方案:转义  ’ 。   ’不再隔断SQL语法,作为SQL参数值出现

解决关于SQL注入问题,你知道吗?

原生JDBC:preparedStatement, 把SQL语句中的特殊字符全部进行转义。

不建议直接拼接字符串,建议使用?占位符赋值。

Mybatis中:

#{}   ======>  preparedStatement的?占位符,解决SQL注入

${}   ======> 相当于 Statement 进行字符串的拼接,引起SQL注入

看完恭喜你,又知道了一点点!!!

你知道的越多,不知道的越多! 

~感谢志同道合的你阅读,  你的支持是我学习的最大动力 ! 加油 ,陌生人一起努力,共勉!!

注: 如果本篇有需要改进的地方或错误,欢迎大神们指定一二~~

忆蝶梦寒

关于作者: 忆蝶梦寒

为您推荐