Segurança · 4 min read · Oct 27, 2025
Como Escanear Automaticamente Arquivos Enviados em Busca de Vírus Com php-clamavlib
Como Escanear Automaticamente Arquivos Enviados em Busca de Vírus Com php-clamavlib
Versão 1.0
Autor: Falko Timme
Este guia descreve como você pode escanear automaticamente arquivos enviados por usuários através de um formulário da web em seu servidor usando PHP e ClamAV. Dessa forma, você pode garantir que seu formulário de upload não será abusado para distribuir malware. Para integrar PHP e ClamAV, instalamos o pacote php5-clamavlib/php4-clamavlib, que está bastante documentado neste momento. Esse pacote está disponível para Debian Etch e Sid e também para Ubuntu Dapper Drake e Edgy Eft, então certifique-se de usar uma dessas plataformas.
Quero dizer primeiro que esta não é a única maneira de configurar tal sistema. Existem muitas maneiras de alcançar esse objetivo, mas este é o caminho que eu sigo. Não dou nenhuma garantia de que isso funcionará para você!
1 Nota Preliminar
Como eu disse antes, seu sistema deve usar Debian Etch, Sid, Ubuntu Dapper Drake ou Ubuntu Edgy Eft, e você já deve ter Apache2 e PHP4 ou PHP5 instalados.
Se você estiver no Debian Sarge, pode instalar o pacote php-clamavlib do backports.org: http://www.backports.org/debian/pool/main/p/php-clamavlib/
Eu assumo que você usa /var/www como o diretório raiz padrão. Se você já tiver vários sites na sua servidor, ajuste o diretório raiz conforme suas necessidades. Além disso, eu uso 192.168.0.100 como o endereço IP do meu servidor neste exemplo. Ajuste isso também, e se você tiver vários sites com uma configuração de vhost baseada em nome, deve usar o respectivo domínio/FQDN para acessar o site em vez do endereço IP.
Eu realizo todos os passos aqui como usuário root. Portanto, certifique-se de estar logado como root ou, se você estiver no Ubuntu, adicione sudo a todos os comandos, por exemplo.
apt-get updatese tornaria
sudo apt-get update 2 Modificar /etc/apt/sources.list
Se você usar Ubuntu Dapper Drake ou Ubuntu Edgy Eft, deve modificar /etc/apt/sources.list para que o repositório universe esteja habilitado. Se você estiver no Debian Etch ou Sid, então não edite /etc/apt/sources.list.
2.1 Ubuntu Dapper Drake
Edite /etc/apt/sources.list e certifique-se de que você tenha a linha deb http://de.archive.ubuntu.com/ubuntu/ dapper universe nela (substitua de.archive.ubuntu.com por um espelho do Ubuntu próximo a você):
vi /etc/apt/sources.list| [...] deb http://de.archive.ubuntu.com/ubuntu/ dapper universe [...] |
Então execute
apt-get updatepara atualizar o banco de dados de pacotes.
2.2 Ubuntu Edgy Eft
Edite /etc/apt/sources.list e certifique-se de que você tenha a linha deb http://de.archive.ubuntu.com/ubuntu/ edgy universe nela (substitua de.archive.ubuntu.com por um espelho do Ubuntu próximo a você):
vi /etc/apt/sources.list| [...] deb http://de.archive.ubuntu.com/ubuntu/ edgy universe [...] |
Então execute
apt-get updatepara atualizar o banco de dados de pacotes.
3 Instalar ClamAV E php-clamavlib
Em seguida, instalamos o ClamAV (nosso escâner de vírus) e o php-clamavlib, o pacote que fornece a integração entre PHP e ClamAV.
Se você usar PHP5, execute:
apt-get install php5-clamavlib clamav clamav-freshclam clamav-docs arj unzoo Se você usar PHP4, execute:
apt-get install php4-clamavlib clamav clamav-freshclam clamav-docs arj unzoo Então reinicie o Apache:
/etc/init.d/apache2 restartSe você quiser, pode dar uma olhada no seu php.ini ( /etc/php5/apache2/php.ini se você usar PHP5, /etc/php4/apache2/php.ini se você usar PHP4) para ver se há entradas para php-clamavlib. Essas devem ser assim:
vi /etc/php5/apache2/php.ini| [...] extension=clamav.so [clamav] clamav.dbpath=/var/lib/clamav clamav.maxreclevel=0 clamav.maxfiles=0 clamav.archivememlim=0 clamav.maxfilesize=0 clamav.maxratio=0 |
vi /etc/php4/apache2/php.ini| [...] extension=clamav.so [clamav] clamav.dbpath=/var/lib/clamav clamav.maxreclevel=0 clamav.maxfiles=0 clamav.archivememlim=0 clamav.maxfilesize=0 clamav.maxratio=0 |
Se você estiver no Debian Sarge, pode instalar o pacote php-clamavlib do backports.org: http://www.backports.org/debian/pool/main/p/php-clamavlib/
4 Funções do php-clamavlib
Não há documentação sobre as funções PHP fornecidas pelo php-clamavlib, mas encontrei um script chamado clamav.php no código-fonte do php-clamavlib que mostra quais funções estão disponíveis. Criamos o mesmo script agora em nosso diretório /var/www:
vi /var/www/clamav.php| \n"; foreach($functions as $func) { echo $func." |
\n"; } echo "
\n"; $function = 'confirm_' . $module . '_compiled'; if (extension_loaded($module)) { $str = $function($module); } else { $str = "Módulo $module não está compilado no PHP"; } echo "$str\n"; ?>
Agora digite http://192.168.0.100/clamav.php no seu navegador. A saída deve ser assim:
Funções disponíveis na extensão de teste:
cl_info
cl_scanfile
cl_scanbuff
cl_setlimits
cl_scanfile_ex
cl_scanbuff_ex
cl_pretcode
clam_scan_buffer
clam_scan_file
clam_get_version
Fatal error: Call to undefined function confirm_clamav_compiled() in /var/www/clamav.php on line 14Você pode ignorar o erro fatal na última linha.
Agora sabemos quais funções estão disponíveis, mas não sabemos quais parâmetros elas precisam. Encontrei esta página: http://www.clamav.net/doc/0.88.4/html/node41.html que descreve funções semelhantes no código-fonte do ClamAV. Testando e lendo essa página, descobri como usar as funções cl_info(), cl_scanfile(), cl_setlimits() e clam_get_version(). Essas são todas as funções que precisamos para escanear arquivos enviados (na verdade, precisaríamos apenas de cl_scanfile()). No próximo capítulo, criaremos um pequeno formulário HTML de upload e usaremos essas funções para escanear arquivos enviados em busca de vírus.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.