Security 允许用户添加到自己的nginx虚拟主机文件是否存在安全风险?

Security 允许用户添加到自己的nginx虚拟主机文件是否存在安全风险?,security,nginx,configuration-files,user-input,virtualhost,Security,Nginx,Configuration Files,User Input,Virtualhost,假设我给了一些人通过nginx托管的帐户。如果我在他们的虚拟主机配置文件中添加一行,其中包含驻留在其主目录中的额外配置文件,这会导致任何形式的安全漏洞吗 以下是用户的虚拟主机文件: server { listen 80; server_name user.example.com; access_log /var/log/nginx/user.access.log; location / { root /home/user/htdocs;

假设我给了一些人通过nginx托管的帐户。如果我在他们的虚拟主机配置文件中添加一行,其中包含驻留在其主目录中的额外配置文件,这会导致任何形式的安全漏洞吗

以下是用户的虚拟主机文件:

server {
    listen 80;
    server_name user.example.com;
    access_log /var/log/nginx/user.access.log;
    location / {
        root /home/user/htdocs;
        index index.html index.htm index.php;
    }
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME  /home/user/htdocs$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

    # The important bit
    include /home/user/extra_config;

}

理论上,这将与一个cron作业相结合,该作业检查每个额外的_配置的时间戳,并在必要时重新加载nginx。理想情况下,用户会利用它来拒绝访问私有文件/目录或创建重写-基本上,它将是.htaccess的一种替代方法。但这种方法有什么缺陷吗?有没有更好的方法来实现它?

最好只允许白名单上的配置指令。您不希望恶意用户(“Eve”)劫持其他用户的流量。e、 例如,我相信用户可以构建如下配置:

} 
server {
   listen 80;
   server_name alice.example.com;
   root /home/eve/htdocs;
}
server {
   listen 80;
   server_name bob.example.com;
   root /home/eve/htdocs;
}
server {
   listen 80;
   server_name passwd.example.com;
   root /etc/passwd;

相反,在理想情况下,您可以通过某种专门构建的UI获取输入,并根据该用户输入自行构建适当的nginx配置。例如,我允许用户以类似的方式指定IP禁令——我有一个只接受IP列表的UI。然后,我通过一个正则表达式验证IPs的格式,并写出nginx deny指令。

那么“include”语句实际上是将文件直接注入配置、多余的花括号和所有内容?这就是我使用自定义解析器的充分理由。谢谢你的帮助。我想你必须注意的另一件事是糟糕的语法,即使假设没有安全问题。如果所包含的配置文件中存在致命的sytax错误,nginx将不会启动。我正在编写一个解析器来检查错误的语法。在最坏的情况下,reload命令将失败,只是让服务器保持原样。您可以采取的一种方法是:语法:备份旧文件,安装新文件,然后运行
nginx-t
来测试配置。如果nginx-t失败,则拒绝新文件。