【问题描述】
如果请求路径存在中文,会出现下面图中问题
【重现步骤】
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、shrio
在1.7.0
版本中做了路径解码处理,之前只验证解码之前的字符,现在连解码之后的字符也校验了,所以导致中文无法带在路径中
参考1:代码提交记录升级shiro到最新版1.7.0 阻止权限绕过漏洞
参考2:
shrio1.6.0#InvalidRequestFilter
shrio1.7.0#InvalidRequestFilter
【解决办法】
1、降低shrio
版本到1.6.0
(不推荐,因为权限绕过漏洞在等保测评中会查到,需要升级)
2、设置InvalidRequestFilter
的blockNonAscii
为false
(不推荐,shiro
官网已经说明在后续版本中将移除blockNonAscii
属性)
3、去掉中文字符,养成良好习惯(推荐)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
@Ricky 请问设置InvalidRequestFilter的blockNonAscii为false,怎样设置,在哪个设置地方?
@仇东
参考文档:如何解决请求地址存在中文出现异常
登录 后才可以发表评论