如何拒绝含特定URL编码字符的请求?Nginx配置求助
解决Nginx拒绝特定POST请求的问题
你的配置无效的核心原因是:Nginx在处理location匹配时会自动对URI进行URL解码,所以你写的/%21会被解码成/!,导致两种请求都会匹配到同一个规则,无法区分。
要实现拒绝"/%21/Form/create"的POST请求、允许"/!/Form/create"的POST请求,需要利用Nginx的$request_uri变量——这个变量保存的是客户端发送的原始未解码的请求路径,能精准区分两种不同的请求格式。
正确的Nginx配置
将以下代码添加到你的server块中(建议放在其他location规则之前):
if ($request_uri = '/%21/Form/create' && $request_method = POST) { return 403; }
配置说明
$request_uri = '/%21/Form/create':精准匹配客户端发送的原始未解码请求路径$request_method = POST:仅针对POST请求生效return 403:返回403禁止访问状态码,你也可以根据需求改为return 444(直接关闭连接)
配置生效后,所有指向/%21/Form/create的POST请求会被拒绝,而正常的/!/Form/createPOST请求可以正常通行。
内容的提问来源于stack exchange,提问作者espenlg
相关产品推荐
相关产品推荐

