1.什么是sql注入?
最早接触sql注入是在大学的时候,其实我理解,就是sql 对传入参数的拼接,会引发安全问题,举个例子
select name from student where id = (); 这里括号里的参数我如果传 “3;drop table student;”,就发生注入了。
2.原理,怎么防止?
发生sql注入的原因是,不安全的参数拼接,编译后,sql执行,如上例子,会出现问题。那怎么防止?
其实在Java JDBC中 我们都知道 有 用 ?占位符去代替参数先进行编译,然后代入参数执行,这样就可以避免注入,why?因为sql注入不安全因素是发生在编译期,用占位符后,就避免了这个问题。
3.mybatis中的防注入?#{} 和${}区别?
其实 #{}正是用了?占位符,而${} (使用场景:order by 这样固定的字段后面,但也要防止安全问题)则是原样代入,mybatis就是用#{}来实现防注入,而底层是用JDBC的PreparedStatement实现的,如上个问题所述。