Mybatis的orderby引起的sql注入

sql中两种传参数的方式:

#{param} 这种是经过预编译的,不会有sql注入

${param} 这种仅仅取变量的值,可以有sql注入

但是在orderby中之能用${param},用#会导致排序不生效。

例如,传入值为name时

用 SELECT * FROM STUDENT ORDER BY #{orderby}会变成:

    SELECT * FROM STUDENT ORDER BY "name"

用 SELECT * FROM STUDENT ORDER BY ${orderby}会变成:

    SELECT * FROM STUDENT ORDER BY name

 

常见的解决orderBy的sql注入的方式:

手动过滤,添加白名单

其它用到$符号的场景:

当数据库分表的时候,表格很多,不会把表名写死,改用$传入

 

你可能感兴趣的:(mybatis)