我在网址example.com/media/
上有一个媒体文件夹,我想拒绝用户在我的服务器上运行脚本。我的服务器应用程序是nginx,在How to deny script execution inside writable directories我找不到任何关于特定URL的特殊内容。这是我的nginx服务器配置:
# sites-avalaible/default
server {
listen 80;
listen 443 ssl;
server_name www.example.com example.com;
ssl_certificate /var/www/example/ssl/ssl.crt;
ssl_certificate_key /var/www/example/ssl/ssl.key;
location /static {
alias /var/www/example/static;
expires 7d;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
location /media {
alias /var/www/example/media;
# limit download speed after 5mb download
limit_rate_after 5m;
limit_rate 120k;
limit_req zone=lh burst=5 nodelay;
}
location / {
proxy_pass http://127.0.0.1:8000;
}
}
我想拒绝在我的媒体网址中运行任何可执行文件,用户可以将文件上传到服务器。我怎样才能做到这一点?例如,当用户导航到example.com/media/bomb.py
nginx时返回404错误页面。我还更改了媒体文件夹执行权限,但我需要为nginx执行此操作以停止查看脚本文件。
答案 0 :(得分:2)
这将禁用媒体目录中的所有php和py脚本执行。像这样你可以禁用任何其他脚本。
location /media/ {
location ~ .*\.(php)?$
{
deny all;
}
location ~ .*\.(py)?$
{
deny all;
}
}
答案 1 :(得分:1)
编辑:如果稍后添加对其他脚本类型的支持,则仅提供已识别的媒体类型并拒绝其余类型将更安全:
location ^~ /media/ {
location ~ \.(?:jpg|png|gif)$ {}
return 403; # or 404
}
答案 2 :(得分:-2)
位置^〜/ media / {}