我希望nginx拒绝那些在/ webroot / uploads里面有文件夹的用户
例如
/webroot/uploads/user1 /webroot/uploads/user2 /webroot/uploads/user1000
执行任何shell(php,pl,exe)。
shell通常隐藏在jpg或gif文件中。 像badfile.php.jpg一样
我也看到茂盛的二进制文件被上传到文件夹。
这里我的初步规则是:
location ~ /webroot/uploads/(.+)\.php$ { deny all; } location ~ /webroot/uploads/(.+)\.pl$ { deny all; }
但我不确定它是否健壮。 所以我感谢你的帮助。
如果你想绝对确保在/ webroot / uploads或下面的任何地方执行任何操作,我会build议在文件系统级别阻止执行。 为/ webroot / uploads创build一个文件系统,并使用“noexec”选项安装它:
mount -t ext4 -o 'noexec,rw' /dev/<device-name> /webroot/uploads/
注意:如果您使用的是受pipe服务器,或者没有可用的存储来configuration文件系统,则可以将其挂载到回送设备上:
警告:在运行以下命令之前,请备份/ webroot / uploads并将文件移动到临时位置。
返回下一个可用的循环设备 – 将是/ dev / loop [0-8]之一
sudo losetup -f
创build一个图像作为文件系统 – 这会在/ opt中创build一个1GB的文件
sudo dd if=/dev/zero of=/opt/uploads_fs.img bs=1M count=1024
configuration第一个命令返回的环回设备以使用新文件
losetup /dev/loop0 /opt/uploads_fs.img
创build一个文件系统
mkfs.ext4 -m 1 -v /dev/loop0
挂载/ webroot /在没有设置noexec的新设备上上传
mount -t ext4 -o 'noexec,rw' /dev/loop0 /webroot/uploads/
此时 ,将文件恢复到以前的位置。 即使是root用户,也不能在该文件系统上执行文件:
[root@localhost testfs]# ll myscript* -rwxrwxrwx. 1 root root 41 Jan 21 19:20 myscript.sh [root@localhost testfs]# ./myscript.sh -bash: ./myscript.sh: Permission denied [root@localhost testfs]#
这个怎么样?
location ~ /webroot/uploads/.*\.(php|pl|rb|sh)$ { deny all; }
默认情况下,nginx不会将文件传递给parsing器或执行它们。 它只会为他们服务。 拒绝规则只有在您已经configuration了nginx来将php / pl / rb文件传递给parsing或执行它们的东西时才是必须的。