之前研究了在jetty下得问题 不过现在公司大都使用spring-boot快速开发
spring-boot+tomcat得标配情况下 同样存在一些安全隐患
做个小实验
写一个简单得demo
写一个url过滤器
从规则来看 除了/open 开头得url /lock得url是不能被访问得
其他url会返回failed
这里就出现了一个问题
如果我们访问/open/11是可以的 但是并不存在这个路径
这里就可以利用tomcat+spring得问题 绕过
tomcat得特性 会回溯到上一级目录
而过滤器实现是getRequestURI 获取到的地址是原始地址
所以当我们请求为http://127.0.0.1:8080/open/..;/lock
过滤器判断我们请求得地址为 放过得地址
所以没做拦截 但是spring解析到得地址为http://127.0.0.1:8080/lock
绕过了过滤器从而访问到了 不应该被访问得内容
而这个过滤不一定是对 url做过滤 也有可能对url做验证token得操作 但是通过以上得方法很有可能使用一个open的地址绕过token的效验
避免以上为题也有两种方法 一种是简单粗暴直接把 “.” “;” 过滤了 但是参数变化多端 谁能保证传参中不会出现 “.” 或者 “;” 呢
还有一种方法就是normalize