Nginx location 语法匹配详解,渗透漏洞WEB-INF文件泄露修复

1、语法规则,类似switch case 

location [=|~|~*|^~|!~|!~*] /uri/ { … }

多个 location 规则匹配优先级如下: 

模式

含义

location = /uri/

= 表示精确匹配,只匹配路径为 /uri/ 的请求,不会匹配任何子路径,比如不会匹配 /uri/a 的请求。

location ^~ /uri

^~ 前缀匹配区分大小写

location ~ pattern

正则匹配,区分大小写

location ~* pattern

正则匹配,不区分大小写

location !~

正则不匹配,区分大小写

location !~*

正则不匹配,不区分大小写

location /uri/

不带任何修饰符,也表示前缀匹配,但是优先级在正则匹配之后

location /

通用匹配,任何未匹配到其它 location 的请求都会匹配到,相当于 switch 中的 default

当 URL 为 /images/png/a.png 时,它不会匹配到 location = /images/ 这个规则。因为该 location 只匹配路径为 /images/ 的请求,不会匹配任何子路径。
相同优先级的location,后面的location将会覆盖前面的location。
最佳匹配规则:按照能匹配到的最多的规则进行匹配,比如 当 URL 为 /images/png/a.png 时,/images/png 优先于 /images/ 优先于/ ,这也是为什么 /相当于 switch 中的 default。

匹配优先级

  • 首先精确匹配 =
  • 其次前缀匹配 ^~
  • 其次是按文件中顺序的正则匹配
  • 然后匹配不带任何修饰的前缀匹配
  • 最后是交给 / 通用匹配
  • 当有匹配成功时候,停止匹配,按当前匹配规则处理请求

匹配的时候依照最佳匹配规则,按照能匹配到的最多的规则进行匹配
 location ^~ /test/react/  location ^~ /test/,请求 http://localhost/test/react/react.dev.js,会匹配 location /test/react/

2、语法示例

有如下匹配规则:

location = / {
    echo "规则A";
}
location = /login {
    echo "规则B";
}
location ^~ /static/ {
    echo "规则C";
}
location ^~ /static/files {
    echo "规则X";
}
location ~ \.(gif|jpg|png|js|css)$ {
    echo "规则D";
}
location ~* \.png$ {
    echo "规则E";
}
location /img {
    echo "规则Y";
}
location / {
    echo "规则F";
}

则产生的效果如下:

  • 访问根目录/,比如http://localhost/将匹配规则 A
  • 访问http://localhost/login将匹配规则 B,http://localhost/register则匹配规则 F
  • 访问http://localhost/static/a.html将匹配规则 C
  • 访问http://localhost/static/files/a.exe将匹配规则 X,虽然规则 C 也能匹配到,但因为最大匹配原则,最终选中了规则 X。
  • 访问http://localhost/a.gifhttp://localhost/b.jpg将匹配规则 D 和规则 E,但是规则 D 顺序优先,规则 E 不起作用,而http://localhost/static/c.png则优先匹配到规则 C。
  • 访问http://localhost/a.PNG则匹配规则 E,而不会匹配规则 D,因为规则 E 不区分大小写。
  • 访问http://localhost/img/a.gif会匹配上规则 D,虽然规则 Y 也可以匹配上,但是因为正则匹配优先,而忽略了规则 Y。
  • 访问http://localhost/img/a.tiff会匹配上规则 Y。
  • 访问http://localhost/category/id/111则最终会匹配到规则 F,因为以上规则都不匹配,这个时候应该是 Nginx 转发请求给后端应用服务器,比如 FastCGI(php),tomcat(jsp),Nginx 作为反向代理服务器存在。

3、应用示例,渗透漏洞WEB-INF文件泄露修复

测试发现javax.faces.resource.../WEB-INF/目录工程文件泄露。

Web.xml:

http://192.168.1.2:8081/项目名/javax.faces.resource.../WEB-INF/web.xml.jsf

Application.xml:

http://192.168.1.2:8081/项目名/javax.faces.resource.../WEB-INF/classes/applicationContext.xml.jsf

 

 需要拦截WEB-INF文件,配置如下

                location ~ /(WEB-INF|META-INF)/* {  
                    #deny all;
                    return 404;  
                }

 表示 url地址包含WEB-INF或者META-INF 走第一个location

否则其他所有地址走第二个location

 转载:

Nginx location 匹配详解、location [=|~|~*|^~|!~|!~*] 详解_止水聊技术-CSDN博客

Nginx之 Location 的生成 - 季末的天堂 - 博客园

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值