在 nginx 中匹配 url 中的特殊字符

在 nginx 中匹配 url 中的特殊字符

我运行 dotdotpwn 来测试使用 nginx/nasxi/doxsi 对 Web 服务器进行的横向攻击,唯一“成功”的是以问号开头的 URL。没什么大不了的,因为它们只是默认为 index.html,但作为一个学习过程,我想用 403 标记此类请求。目前我正在提供静态页面。

这是我尝试捕获此类请求的方法:

location ~ [\?=+-] {
         return 403;
       }

这不管用。(如果管用,我会在这里发帖吗?;-))

我使用的唯一非字母数字是下划线,所以最终我想抓住所有特殊字符。

答案1

因此,nginx 文档说位置指令与请求 URI 匹配。

nginx 定义 URI 的方式是将其作为域之后和 URL 参数之前的部分。因此,例如/index.html/foo/bar/index.php可能是 URI。对于您的目的而言,这意味着位置指令永远不会匹配 ?,除非它是作为 URI 的一部分而不是 URL 参数进行 URL 编码。

如果你真的想这样做,你必须这样做

if ($request_uri ~ regex) { 
    return 444;
}

相关内容