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