sql注入风险--如果利用 asd'or'1'='1 登录都会显示登录成功,因为后面有个条件 or 1=1成立
String sql = "select * from student where `name` = '" + name + "' and `password` ='" + password + "'";
这样会导致即使密码错误,也会登陆成功,以下是利用占位符去避免这种情况
String sql="select * from student where name=? and password=?";
# mybatis中#{}和${}的区别
- #{}:预编译,参数占位符
- ${}:字符串拼接,直接替换
核心区别
SQL注入
- #{}:安全,防Sql注入
- ${}:不安全,会被注入
处理方式
- #{}:变成?预编译,JDBC预处理
- ${}:不会加引号,传字符串要手动加,例:
where name =‘${name}’
一句话总结
- #{}:是预编译参数,安全,推荐使用
- ${}:是字符串替换,不安全,只用于动态表明/列名