研读Tomcat源码来看URI处理特性

声明

出品|先知社区(ID:RoboTerh)

以下内容,来自先知社区的RoboTerh作者原创,由于传播,利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责,长白山攻防实验室以及文章作者不承担任何责任。

前言

这里通过阅读源码和黑盒测试相结合的方式来更加透彻的了解Tomcat的url解析策略

parsePathParameters

处理逻辑

跟进这个方法的调用,看看具体的逻辑是什么

如果不为空,也即是req.scheme返回的是https,则将会设置secure属性值为true

反之,如果为空,也即是http请求,将会将属性值设置为false

接下来的逻辑就是有代理就设置代理,没有的话,将会判断tomcat有没有对端口进行配置,如果这里是通过https进行请求,将会将服务端口设置为443,反之就是默认端口80

这里主要看看pathParamEnd的获取方式

好了,现在回到parsePathParameters方法中的逻辑来,如果在第一个;后面出现了分隔符,将会进入if语句中去

总结

这里可以简单做个总结

/upload;test ==> /upload

/upload;test/ ==> /upload/

/upload;test;/ ==> /upload/

/upload;te;st/ ==> /upload/

/upload;te/st/ ==> /upload/st/

/upload;te/s;t/ ==> /upload/s/

/upload;te;s;t/ ==> /upload/

/upload;te;s/t/ ==> /upload/t/

这里通过黑白盒的方式,大概可以看出来,

在URI中以;开头,并且以;或者/结尾的地方将会在处理过程中进行舍弃

如果URI末尾存在/,解析之后的URI一定存在/

normalize处理逻辑

接下来我们回到postParseRequest方法中继续阅读Tomcat源码,在这里通过调用req.getURL-Decoder().convert方法对URI进行url解码

这里主要是在URI的Byte数组中寻找是否存在有%, 之后进行后续解码操作,之后来到了normalize方法的调用

/upload/../ ==> /

/upload/./ ==> /upload/

/./upload/ ==> /upload/

/../upload/ ==> /upload/

\upload/ ==> /upload/

\\upload/ ==> /upload/

欢迎关注长白山攻防实验室

定期更新优质文字分享

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值