4.4K Star 22.3K Fork 11.3K

GVP若依 / RuoYi

 / 详情

请求路径中存在中文,导致请求出现Invalid request

Done
member
Opened this issue  
2020-12-17 10:51

【问题描述】
如果请求路径存在中文,会出现下面图中问题
输入图片说明
【重现步骤】
1、templates/system/config/config.html中将列表中编辑按钮的configId,换成'中文',如下
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + '中文' + '\')"><i class="fa fa-edit"></i>编辑</a> ');
2、后台对应部分修改如下

/**
* 修改参数配置
*/
@GetMapping("/edit/{configId}")
public String edit(@PathVariable("configId") String configId, ModelMap mmap)
{
    System.err.println(configId);
    return prefix + "/edit";
}

3、浏览器访问,点击编辑按钮,弹出错误
【原因分析】
1、shrio1.7.0版本才会出现的,shrio在一开始就做了防止权限绕过,但是不算完善,一直在做升级,1.6版本加入了InvalidRequestFilter,通过验证地址中是否存在黑名单字符来阻止权限绕过,中文字符编码后一般情况下不会出现在黑名单中的,所以路径中有中文的还可以使用;
2、shrio1.7.0版本中做了路径解码处理,之前只验证解码之前的字符,现在连解码之后的字符也校验了,所以导致中文无法带在路径中
参考1:代码提交记录升级shiro到最新版1.7.0 阻止权限绕过漏洞
参考2:
shrio1.6.0#InvalidRequestFilter
shrio1.7.0#InvalidRequestFilter
【解决办法】
1、降低shrio版本到1.6.0(不推荐,因为权限绕过漏洞在等保测评中会查到,需要升级)
2、设置InvalidRequestFilterblockNonAsciifalse(不推荐,shiro官网已经说明在后续版本中将移除blockNonAscii属性)
3、去掉中文字符,养成良好习惯(推荐)

+11

Comments (3)

Ricky created任务
Ricky set related repository to 若依/RuoYi
Ricky changed issue state from 待办的 to 已完成
Ricky changed description
Ricky changed description
Ricky changed description
Ricky changed description
展开全部操作日志

@Ricky 请问设置InvalidRequestFilter的blockNonAscii为false,怎样设置,在哪个设置地方?

@Ricky 请问设置InvalidRequestFilter的blockNonAscii为false,怎样设置,在哪个设置地方?

@仇东
参考文档:如何解决请求地址存在中文出现异常

Sign in to comment

状态
Assignees
Milestones
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
Branches
Planed to start   -   Planed to end
-
Top level
Priority
参与者(2)
389553 richmoster 1598435988
Java
1
https://gitee.com/y_project/RuoYi.git
git@gitee.com:y_project/RuoYi.git
y_project
RuoYi
RuoYi

Search