Mybatis#{}${}的使用和使用场景2020/12/6

使用技巧

不论是单个参数还是多个参数,一律建议使用@param("")

能用#{}的地方尽量使用#{},减少${}

表名作为参数时,必须使用${}

order by 时,必须使用${}

使用${}时要注意何时加或不加单引号

#{}与${}使用场景

${}哪边都能使用,只是存在sql注入风险,相当于直接拼接字符串,不对参数做任何处理。

#{}会进行预编译,对参数进行处理,防止注入。

对于SELECT id,name,age FROM student WHERE name = 参数;这样的语句如果传入参数anything’ OR ‘x’='x

那么${}处理完就是SELECT id,name,age FROM student WHERE name = ‘anything’ OR ‘x’=‘x’,可以看到被注入了。

而#{}处理完就是SELECT id,name,age FROM student WHERE name = ‘anything’ OR ‘x’=‘x’,参数已经进行转义。

既然这样那为什么还要用${}呢。

因为使用#{}存在一个不足,当参数为字符串时会加上’’,这就导致某些情况下sql失效。

SELECT * FROM #{tableName},当使用#{}传入参数user,sql就会变成

SELECT * FROM ‘user’. 这样就会报错查询不到数据

上一篇:JavaScript判断变量的类型


下一篇:某SQL注入--报错注入payload