在mybatis中使用$符号
不会进行预编译,会被sql注入
注入方式如下:
密码随便输一个就可以通过验证,只要用户名正确即可。
这样输入后查询语句在数据库中如下:
select id,username,password from userLogin where username='admin' OR 1=1 and password='23'
sql解释:AND优先级高于OR 首先判断后面1=1 and password='23'为false,然后判断前面username='admin'为true中间
连接为OR即最后为true OR false 最后还是为true,就直接通过验证,能够正常登陆admin用户。
在mybatis中使用#符号
这样会进行预编译,能够防止sql注入。sql注入只有在编译时才有效,而预编译的时候是用个?代替参数,真正执行时才把参数替换?。