专栏名称: 衡阳信安
船山院士网络安全团队唯一公众号,为国之安全而奋斗,为信息安全而发声!
目录
相关文章推荐
河北交通广播  ·  【992 | ... ·  16 小时前  
河北交通广播  ·  【992 | ... ·  2 天前  
Python爱好者社区  ·  刚刚,DeepSeek放出重磅论文!梁文锋亲 ... ·  3 天前  
河北交通广播  ·  【992 | 关注】低至200元!价格“大跳水”! ·  2 天前  
河北交通广播  ·  【992 | 明确】减免!名单公布→ ·  3 天前  
51好读  ›  专栏  ›  衡阳信安

Sa-Token对url过滤不全存在的风险点

衡阳信安  · 公众号  ·  · 2024-09-18 00:00

正文

下载地址:https://github.com/dromara/Sa-Token
使用文档:https://sa-token.cc/doc.html#/start/example

使用request.getRequestURI() 获取url:

更改com.pj.satoken.SaTokenConfigure#getSaServletFilter函数,
放行js后缀的路径和登录入口/acc/doLogin,其他的路径均需登录之后才能访问,

.addInclude("/**").addExclude("/**/*.js", "/acc/doLogin")

// 认证函数: 每次请求执行
.setAuth(obj -> {
// SaManager.getLog().debug("----- 请求path={} 提交token={}", SaHolder.getRequest().getRequestPath(), StpUtil.getTokenValue());
// 检查用户是否登录
if (!StpUtil.isLogin()) {
// 如果未登录,抛出异常或返回拒绝访问的错误
throw new SaTokenException("没有登录");
}

})

cn.dev33.satoken.filter.SaPathCheckFilterForServlet#doFilter
这里会判断路径是否合法,

cn.dev33.satoken.fun.strategy.SaCheckRequestPathFunction,
过滤了./和/和.的url编码,%25是为了过滤二次编码,

cn.dev33.satoken.filter.SaServletFilter#doFilter,
全局过滤器会根据com.pj.satoken.SaTokenConfigure#getSaServletFilter中自定义的规则来判断哪些路径需要权限认证,

接着进入notMatch函数匹配请求的路径是否符合不需要权限认证的情况,
之后利用request.getRequestURI()获取我们请求的路径去匹配我们自定义的规则,

request.getRequestURI(),他直接获取我们请求的路径,
使用../和url编码会绕过以下规则,
.addInclude("/ ").addExclude("/public/ "),
payload如下:/public/../acc/isLogin,







请到「今天看啥」查看全文