假设我的网站允许用户创建目录以及上传到名为“/uploads”的目录,如下所示:
/上传/用户创建文件夹_1
/上传/用户创建文件夹_2
/上传/用户创建文件夹_3
... 等等等等
如何防止任何潜在的恶意脚本在“/uploads”中执行以及所有子目录?
服务器块中的以下代码正确吗?
location /uploads/.*.(php|pl|py|jsp|asp|sh|cgi)$ {
return 403;
error_page 403 403.html;
}
非常感谢!
答案1
首先,nginx 不执行脚本。在某些情况下,它可以将请求代理到执行脚本的其他服务器。最常见的情况是扩大请求中的文件和典型的 nginx 配置块如下所示:
location ~* \.php$ {
fastcgi_pass backend;
...
}
所以你的问题应该是:如何防止代理请求到文件夹/uploads/
?有了这个典型的配置,答案就很简单了:
location ^~ /uploads/ {
}
这意味着:如果请求文件夹上传,则仅将它们作为静态文件提供,不要尝试为它们查找正则表达式位置(这需要您了解不同类型的 nginxlocation
s)。
如果您的配置与典型配置有很大不同,我们需要查看它才能给您正确的答案。