Location优先级顺序与目录穿越漏洞

一.Location优先级顺序

配置Nginx Location的时候如何确定Location匹配的优先级如下图:

精准匹配=或者~^优先级:1 > 正则~或者~*匹配 > 空修饰符(一般匹配,取URI匹配最长的) > / (任意通用匹配)

二.目录穿越漏洞

如下配置Nginx Location:

1
2
3
location /file {
      root /var/www/html;
}

此时如果你的/var/www/目录下存在一个.env文件,那么我们可以通过访问:
http://localhost/file../.env
查看到.env文件的内容.

在配置location提供web静态资源访问的时候特别注意,否则造成目录穿越访问,泄漏相关数据。原理就是, nginx拿到/file后面的路径,和root拼接,最后读取这个路径的文件内容(/var/www/html/../.env) 此时文件存在,则能访问到内容.
为了避免这个目录穿越访问问题,我们可以这么配置, 将/file/完全闭合:
1
2
3
location /file/ {
    root /var/www/html;
}

此时再访问http://localhost/file../.env 将访问不到了.