Se você quiser absolutamente garantir que nada seja executado em / webroot / uploads, ou em qualquer lugar abaixo, sugiro bloquear a execução no nível do sistema de arquivos. Crie um sistema de arquivos para / webroot / uploads e monte-o com a opção 'noexec':
mount -t ext4 -o 'noexec,rw' /dev/<device-name> /webroot/uploads/
Observação: Se você estiver usando um servidor gerenciado ou não tiver armazenamento disponível para provisionar um sistema de arquivos, poderá montá-lo em um dispositivo de loopback:
Aviso: Antes de executar os seguintes comandos, faça o backup / webroot / uploads e mova os arquivos para um local temporário.
-
Retorna o próximo dispositivo de loop disponível - será um dos / dev / loop [0-8]
sudo losetup -f
-
Crie uma imagem para funcionar como o sistema de arquivos - isso cria um arquivo de 1GB em / opt
sudo dd if=/dev/zero of=/opt/uploads_fs.img bs=1M count=1024
-
Configure o dispositivo de loopback retornado no primeiro comando para usar o novo arquivo
losetup /dev/loop0 /opt/uploads_fs.img
-
Crie um sistema de arquivos
mkfs.ext4 -m 1 -v /dev/loop0
-
Monte / webroot / uploads no novo dispositivo com o conjunto noexec
mount -t ext4 -o 'noexec,rw' /dev/loop0 /webroot/uploads/
Neste ponto , restaure seus arquivos para os locais anteriores. Mesmo como usuário root, você não poderá executar arquivos nesse sistema de arquivos:
[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]#