Seguridad · 4 min read · Oct 27, 2025
Cómo escanear automáticamente archivos subidos en busca de virus con php-clamavlib
Cómo escanear automáticamente archivos subidos en busca de virus con php-clamavlib
Versión 1.0
Autor: Falko Timme
Esta guía describe cómo puedes escanear automáticamente los archivos subidos por los usuarios a través de un formulario web en tu servidor utilizando PHP y ClamAV. De esta manera, puedes asegurarte de que tu formulario de carga no se abuse para distribuir malware. Para unir PHP y ClamAV, instalamos el paquete php5-clamavlib/php4-clamavlib que está bastante poco documentado en este momento. Ese paquete está disponible para Debian Etch y Sid y también para Ubuntu Dapper Drake y Edgy Eft, así que asegúrate de usar una de estas plataformas.
Quiero decir primero que esta no es la única forma de configurar un sistema así. Hay muchas maneras de lograr este objetivo, pero esta es la forma que elijo. No doy ninguna garantía de que esto funcione para ti.
1 Nota Preliminar
Como dije antes, tu sistema debe usar Debian Etch, Sid, Ubuntu Dapper Drake o Ubuntu Edgy Eft, y ya deberías tener Apache2 y PHP4 o PHP5 instalados.
Si estás en Debian Sarge, puedes instalar el paquete php-clamavlib desde backports.org: http://www.backports.org/debian/pool/main/p/php-clamavlib/
Asumo que usas /var/www como la raíz del documento por defecto. Si ya tienes múltiples sitios web en tu servidor, ajusta la raíz del documento a tus necesidades. Además, uso 192.168.0.100 como la dirección IP de mi servidor en este ejemplo. Ajusta esto también, y si tienes múltiples sitios web con una configuración de vhost basada en nombre, debes usar el dominio/FQDN respectivo para acceder al sitio web en lugar de la dirección IP.
Realizo todos los pasos aquí como el usuario root. Así que asegúrate de haber iniciado sesión como root o, si estás en Ubuntu, anteponer todos los comandos con sudo, por ejemplo.
apt-get updatese convertiría en
sudo apt-get update 2 Modificar /etc/apt/sources.list
Si usas Ubuntu Dapper Drake o Ubuntu Edgy Eft, debes modificar /etc/apt/sources.list para que el repositorio universe esté habilitado. Si estás en Debian Etch o Sid, entonces no edites /etc/apt/sources.list.
2.1 Ubuntu Dapper Drake
Edita /etc/apt/sources.list y asegúrate de tener la línea deb http://de.archive.ubuntu.com/ubuntu/ dapper universe en él (reemplaza de.archive.ubuntu.com con un espejo de Ubuntu cercano a ti):
vi /etc/apt/sources.list| [...] deb http://de.archive.ubuntu.com/ubuntu/ dapper universe [...] |
Luego ejecuta
apt-get updatepara actualizar la base de datos de paquetes.
2.2 Ubuntu Edgy Eft
Edita /etc/apt/sources.list y asegúrate de tener la línea deb http://de.archive.ubuntu.com/ubuntu/ edgy universe en él (reemplaza de.archive.ubuntu.com con un espejo de Ubuntu cercano a ti):
vi /etc/apt/sources.list| [...] deb http://de.archive.ubuntu.com/ubuntu/ edgy universe [...] |
Luego ejecuta
apt-get updatepara actualizar la base de datos de paquetes.
3 Instalar ClamAV y php-clamavlib
A continuación, instalamos ClamAV (nuestro escáner de virus) y php-clamavlib, el paquete que proporciona la conexión entre PHP y ClamAV.
Si usas PHP5, ejecuta:
apt-get install php5-clamavlib clamav clamav-freshclam clamav-docs arj unzoo Si usas PHP4, ejecuta:
apt-get install php4-clamavlib clamav clamav-freshclam clamav-docs arj unzoo Luego reinicia Apache:
/etc/init.d/apache2 restartSi lo deseas, puedes echar un vistazo a tu php.ini ( /etc/php5/apache2/php.ini si usas PHP5, /etc/php4/apache2/php.ini si usas PHP4) para ver si hay entradas para php-clamavlib. Estas deberían verse así:
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 |
Si estás en Debian Sarge, puedes instalar el paquete php-clamavlib desde backports.org: http://www.backports.org/debian/pool/main/p/php-clamavlib/
4 Funciones de php-clamavlib
No hay documentación sobre las funciones de PHP proporcionadas por php-clamavlib, pero encontré un script llamado clamav.php en el código fuente de php-clamavlib que muestra qué funciones están disponibles. Creamos el mismo script ahora en nuestro directorio /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 no está compilado en PHP"; } echo "$str\n"; ?>
Ahora escribe en http://192.168.0.100/clamav.php en tu navegador. La salida debería verse así:
Funciones disponibles en la extensión de prueba:
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
Error fatal: Llamada a una función indefinida confirm_clamav_compiled() en /var/www/clamav.php en la línea 14Puedes ignorar el error fatal en la última línea.
Ahora sabemos qué funciones están disponibles, pero no sabemos qué parámetros necesitan. Encontré esta página: http://www.clamav.net/doc/0.88.4/html/node41.html que describe funciones similares en el código fuente de ClamAV. Probando y leyendo esa página, descubrí cómo usar las funciones cl_info(), cl_scanfile(), cl_setlimits() y clam_get_version(). Todas son las funciones que necesitamos para escanear archivos subidos (de hecho, solo necesitaríamos cl_scanfile()). En el próximo capítulo crearemos un pequeño formulario HTML de carga y usaremos estas funciones para escanear archivos subidos en busca de virus.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.