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 update

se 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 update

para 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 update

para 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 restart

Se 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 14

Você 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.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.