我在URL example.com/media/上有一个媒体文件夹,我想拒绝用户在我的服务器上运行脚本。 我的服务器应用程序是nginx和如何拒绝在可写目录中的脚本执行我找不到特定的URL的任何特殊的。 这是我的nginx服务器configuration:
# 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; } }
我想拒绝在用户可以将file upload到服务器的媒体URL中运行任何可执行文件。 我怎样才能做到这一点? 例如,当用户导航到example.com/media/bomb.py nginx返回404错误页面。 我也改变了媒体文件夹的执行权限,但我需要为nginx做,以停止查看脚本文件。
首先,当nginx中没有其他configuration时,它只是从文件系统中读取文件,然后通过TCP连接发送给客户端。
所以,就你的情况而言,如果你的媒体目录中有一个bomb.py ,你的用户只会收到这个文件,它不会被执行。
其次,你的上传脚本应该检查允许的上传文件types,这样甚至不能上传这样的文件。
最后,你的实际问题的一个答案。 您可以为媒体目录提供更具体的location指令,该指令只允许处理某些扩展名。 其他请求通过location /指令。
location ~* /media/[^\.]+\.(gif|jpg|png)$ { .... }
只有文件名在/media/目录下,此位置指令才会通过该块提供文件,至less有一个字符不是. 并具有gif / jpg / png的扩展名。