若依对sql注入的修复

在看了几个若依的注入后发现其最新版还是会存在${params.dataScope},那这个参数是从哪来的呢,${params.dataScope}的意思就是入参参数的dataScope属性,即 SysDept对象的dataScope属性,可能有点懵逼,随便找个有注入的点跟下去就知道,拿

1
src/main/java/com/ruoyi/web/controller/system/SysRoleController.java

来说,在该层中有两处存在注入,拿其中的unallocatedList方法为例

传入selectUnallocatedList方法查询,参数参考SysUser

这个时候还没有dataScope,跟进selectUnallocatedList方法

查看实现类对selectUnallocatedList方法的实现

在方法的前面有一个注解@DataScope(deptAlias = “d” ),该注解为应用自定义,会根据权限来分配赋值,也就是在这里开始有了params[dataScope],即${params.dataScope}

其实现为DataScopeAspect

在该类的dataScopeFilter方法中有对dataScope参数做拼接的操作

若依对${params.dataScope}的修复比较逗,因为如果使用#{params.dataScope}的话是使用不了的,所以他们在对DATA_SCOPE做拼接查询之前直接把${params.dataScope}的参数清空

clearDataScope方法

这应该是无解了吧


声明:
本文章用于学习交流,严禁用于非法操作,出现后果一切自行承担,阅读此文章表示你已同意本声明。

Disclaimer:
This article is for study and communication. It is strictly forbidden to use it for illegal operations. All consequences shall be borne by yourself. Reading this article means that you have agreed to this statement.