1.Tomcat处理http请求之源码分析 | 京东云技术团队
2.java:java.net.url中的url(java.lang.string)已过时怎么
3.HTTP完全注解一些神奇的URL
4.浅谈URI中的任意文件下载
5.用火狐浏览器查看网页源代码的方法
6.NGINX Location匹配原理及源码分析
Tomcat处理http请求之源码分析 | 京东云技术团队
本文将从请求获取与包装处理、请求传递给 Container、Container 处理请求流程,这 3 部分来讲述一次 /path?param=value,启动其他应用并传递参数。
关于完整教程和更新信息,业主小区商业源码可以关注相关仓库,保持同步,但请确保在分享时遵守版权要求。浅谈URI中的任意文件下载
文件下载业务中,URI的正确处理是关键。通常,接口形式如//download?fileName=xxx.png,若未过滤目录穿越符号如...或未限制下载路径,江湖游戏 源码传入参数如../../etc/passwd即可实现路径穿越,下载任意文件。解析URI以得到文件名,如/file/test.jpg,尝试访问/file/../../test.jpg时,中间件或框架在解析路由时会有所处理。那么,能否通过此途径进行目录穿越并利用呢?
在实际项目中,一个文件下载的实现使用了Spring框架的FileCopyUtils.copy()方法。文件路径filepath通过req.getRequestURI()获取,此方法不规范URI中的特殊字符,直接拼接路径并读取文件,未限制下载目录且未过滤敏感关键字,辅助中控台源码存在任意文件下载风险。
当前项目的upload目录结构如下:
访问../WEB-INF/web.xml,成功穿越到上级目录WebContent,并获取web.xml配置信息。中间件处理../,使其等同于直接访问/userfiles/WEB-INF/web.xml。若尝试读取更敏感文件如/etc/passwd,需要多级../,但tomcat处理后已不在有效目录范围内,返回异常。尝试扩大漏洞危害,编码请求触发 Invalid URI错误,tomcat对保留字符;进行截断并处理为参数。report源码分析在编码基础上再次访问,获取路径为/upload/;/../../../../../../../../etc/passwd,返回状态码。
结合网站其他业务,可以创建名为;的目录,访问/userfiles/upload/;%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fetc%2fpasswd,成功下载敏感文件。
引入@PathVariable注解,用于接收请求路径中的占位符值,可以实现文件下载,如访问/var/work/download/{ filename},下载名为{ filename}的文件。参数在URI中,金贝源码利用还需探究。
通常,直接使用../../../目录穿越尝试下载/etc/passwd等敏感文件,中间件解析时已处理../,参数filename无法利用。处理后URI为/file/etc/passwd,未找到映射,返回。
尝试对/编码访问,tomcat源码检测到%2F斜杠返回状态码。源码流程包括解码和格式化URI。Spring对URI进行一次解码,如/file/get/..%fetc/passwd变为/file/get%2fetc/passwd。
在前端用JS对URL编码,忽略Spring的解码操作。使用双重URL编码处理../请求,绕过中间件和Spring的URLDecode,实现目录穿越,成功下载内容。
集成Shiro框架时,案例一中的;可能需要编码为%3b。Shiro高版本对编码进行处理,继续利用需深思。
用火狐浏览器查看网页源代码的方法
用火狐浏览器查看网页源代码的方法 火狐浏览器 用火狐浏览器查看网页源代码的方法: 1、下载并安装火狐浏览器,打开火狐浏览器; 2、用火狐浏览器打开指定网页; 3、对着网页鼠标右键,就会有一个查看源码; 源代码 4、点击进去就是这个网页的源码了。 浏览器是用来检索、展示以及传递Web信息资源的应用程序。Web信息资源由统一资源标识符( Uniform Resource Identifier,URI)所标记,它是一张网页、一张、一段视频或者任何在Web上所呈现的内容。使用者可以借助超级链接( Hyperlinks),通过浏览器浏览互相关联的信息NGINX Location匹配原理及源码分析
NGINX Location匹配原理及源码分析
在NGINX的服务器配置中,location机制至关重要,它负责根据请求的URI细分成不同的处理方式。正确配置location对生产环境中的服务分发至关重要。本文将深入解析location的配置指令、匹配流程以及源码实现。配置指令详解
location指令是核心配置,有多种定义形式,如使用前缀字符(=, ^~)或正则表达式(~, ~*)。=用于精确匹配,^~则在找到匹配后立即停止搜索。正则表达式的优先级高于前缀,但为提高效率,特殊修饰符有助于简化匹配过程。匹配流程
location匹配遵循最长匹配原则,从头开始遍历配置,首先匹配前缀,再进行正则匹配。一个典型例子是,/精准匹配A,/index.html匹配B,/user/路径匹配C或E,而/images/路径匹配D(^~修饰符影响)。配置文件的顺序决定了最终匹配。数据结构构建
匹配过程涉及到的数据结构包括ngx_http_core_loc_conf_s, ngx_http_location_queue_t等,它们通过ngx_http_init_locations函数进行初始化和排序,形成静态location树和正则表达式list,以便于高效查找。源码解析
location指令解析后,数据结构在ngx_http_find_config_phase阶段被查找,先在static_location树中进行二分查找,然后遍历regex配置。源码中的ngx_http_core_find_location函数是关键执行者。总结
location匹配是NGINX处理请求的核心环节,通过配置区分正则表达式和非正则表达式,利用最长匹配和优先匹配策略。理解这些原理有助于优化生产环境的location配置,提高性能。