特性: 添加一个配置标志,用于设置 NGiNX 是否应解码 URI 中的百分比编码字符
[注]
翻译: 我并不是一个安全专家, 我不知道这个特征是否会产生弱点或类似的东西(例如路径穿梭攻击)。 如果是这样的话,你可以直接关闭或删除这个问题,但我想被重定向到一些有关这个话题的相关文件,并/或接受一些关于如何正确处理这项任务的指导.
请描述您想要加入 nginx 的特性
我想介绍一个名为"decode % characters"(或类似的东西)的配置旗:
- 默认设置为`on',使其不改变NGiNX默认行为;
- 与
相接-鞭打'类似,它被传给了[ngx http parse complex uri()'](https://GitHub.com/nginx/nginx/blob/ecb809305e54ed15be9f620d56b19ff4e4be7db5/src/http/ngx http parse.c#L1245); - 如果设定为 " 关闭 " ,NGiNX不会在请求的URI中以各自的解码值来替换百分位编码字符(即 " 2f " 如果我们设置了 " 解码-百分比-字符关闭; " 在 " nginx.conf " 中),则不会被解码为 " / " );
示例
< 细节> <摘要>显示/隐藏实例 </摘要>
假设我们从源头编译Nginx(文件位于`/usr/local/nginx/'),我们服务2页:
- `/usr/local/nginx/html/path%2fslash/index.html':
时间轴 : 路径 : 路径% 2fslash/
- `/usr/local/nginx/html/path/slash/index.html':
时间轴 :
路径:路径/斜线/□ 在此特性之前
Nginx 配置文件 (`/usr/ local/nginx/conf/nginx.conf'):
QQconf 数据 工人 流程1;
事件{ 工人-连接1024; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
http { 服务器{ 听从80; 服务器名称本地主机; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
测试请求 :
1. 编码斜线:
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
折叠本地主机/路径% 2fslash/
路径:路径/斜线/- 斜线:
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 卷曲本地主机/路径/斜线/ 路径:路径/斜线/
日志(`/usr/local/nginx/logs/access.log'):
翻译:
127.0.0.1 - - [28/Apr/2026:15:42:59+0200] "GET /path/slash/HTTP/1.1" 200 18 "-" "curl/8.5.0"
127.0.0.1 - - [28/Apr/2026:15:42:59+0200] "GET /path/slash/HTTP/1.1" 200 18 "-" "curl/8.5.0"** NB**:它总是返回“路径/斜线”的页面(“"2f"在匹配路线之前自动解码为“/”)。
QQ 有新特性
QQconf 数据 工人 流程1;
事件{ 工人-连接1024; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
http { 解码器 % 字符关闭;
服务器{ 听从80; 服务器名称本地主机; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
测试请求 :
1. 编码斜线:
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
折叠本地主机/路径% 2fslash/
路径 : 路径% 2fslash/- 斜线:
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 卷曲本地主机/路径/斜线/ 路径:路径/斜线/
日志(`/usr/local/nginx/logs/access.log'):
翻译:
127.0.0.1 - - [28/Apr/2026:15:43:54+0200] "GET /path%2fslash/HTTP/1.1" 200 20 "-" "curl-8.5.0"
127.0.0.1 - - [28/Apr/2026:15:43:57+0200] "GET /path/slash/HTTP/1.1" 200 18 "-" "curl/8.5.0"** NB**:它提供正确的页码。
</详情>
QQ 描述此特性解决的问题
有了这个功能,我们就能提供页面 . . . . . . .
内容来源: nginx/nginx