Sécurité · 4 min read · Oct 27, 2025

Comment scanner automatiquement les fichiers téléchargés à la recherche de virus avec php-clamavlib

Comment scanner automatiquement les fichiers téléchargés à la recherche de virus avec php-clamavlib

Version 1.0
Auteur : Falko Timme

Ce guide décrit comment vous pouvez automatiquement scanner les fichiers téléchargés par les utilisateurs via un formulaire web sur votre serveur en utilisant PHP et ClamAV. De cette façon, vous pouvez vous assurer que votre formulaire de téléchargement ne sera pas utilisé pour distribuer des logiciels malveillants. Pour relier PHP et ClamAV, nous installons le paquet php5-clamavlib/php4-clamavlib qui est plutôt peu documenté à ce jour. Ce paquet est disponible pour Debian Etch et Sid ainsi que pour Ubuntu Dapper Drake et Edgy Eft, alors assurez-vous d’utiliser l’une de ces plateformes.

Je tiens à dire d’abord que ce n’est pas la seule façon de mettre en place un tel système. Il existe de nombreuses façons d’atteindre cet objectif, mais c’est la méthode que je choisis. Je ne donne aucune garantie que cela fonctionnera pour vous !

1 Remarque préliminaire

Comme je l’ai dit précédemment, votre système doit utiliser Debian Etch, Sid, Ubuntu Dapper Drake ou Ubuntu Edgy Eft, et vous devez déjà avoir Apache2 et PHP4 ou PHP5 installés.

Si vous êtes sur Debian Sarge, vous pouvez installer le paquet php-clamavlib depuis backports.org : http://www.backports.org/debian/pool/main/p/php-clamavlib/

Je suppose que vous utilisez /var/www comme racine de document par défaut. Si vous avez déjà plusieurs sites web sur votre serveur, ajustez la racine de document selon vos besoins. De plus, j’utilise 192.168.0.100 comme adresse IP de mon serveur dans cet exemple. Ajustez cela également, et si vous avez plusieurs sites web avec une configuration de vhost basée sur le nom, vous devez utiliser le domaine/FQDN respectif pour accéder au site web au lieu de l’adresse IP.

Je fais toutes les étapes ici en tant qu’utilisateur root. Assurez-vous donc que vous êtes connecté en tant que root ou, si vous êtes sur Ubuntu, préfixez toutes les commandes avec sudo, par exemple.

apt-get update

deviendrait

sudo apt-get update  

2 Modifier /etc/apt/sources.list

Si vous utilisez Ubuntu Dapper Drake ou Ubuntu Edgy Eft, vous devez modifier /etc/apt/sources.list afin que le dépôt universe soit activé. Si vous êtes sur Debian Etch ou Sid, ne modifiez pas /etc/apt/sources.list.

2.1 Ubuntu Dapper Drake

Éditez /etc/apt/sources.list et assurez-vous d’avoir la ligne deb http://de.archive.ubuntu.com/ubuntu/ dapper universe dedans (remplacez de.archive.ubuntu.com par un miroir Ubuntu proche de chez vous) :

vi /etc/apt/sources.list

| [...] deb http://de.archive.ubuntu.com/ubuntu/ dapper universe [...] |

Ensuite, exécutez

apt-get update

pour mettre à jour la base de données des paquets.

2.2 Ubuntu Edgy Eft

Éditez /etc/apt/sources.list et assurez-vous d’avoir la ligne deb http://de.archive.ubuntu.com/ubuntu/ edgy universe dedans (remplacez de.archive.ubuntu.com par un miroir Ubuntu proche de chez vous) :

vi /etc/apt/sources.list

| [...] deb http://de.archive.ubuntu.com/ubuntu/ edgy universe [...] |

Ensuite, exécutez

apt-get update

pour mettre à jour la base de données des paquets.

3 Installer ClamAV et php-clamavlib

Ensuite, nous installons ClamAV (notre scanner de virus) et php-clamavlib, le paquet qui fournit le lien entre PHP et ClamAV.

Si vous utilisez PHP5, exécutez :

apt-get install php5-clamavlib clamav clamav-freshclam clamav-docs arj unzoo 

Si vous utilisez PHP4, exécutez :

apt-get install php4-clamavlib clamav clamav-freshclam clamav-docs arj unzoo 

Ensuite, redémarrez Apache :

/etc/init.d/apache2 restart

Si vous le souhaitez, vous pouvez jeter un œil à votre php.ini ( /etc/php5/apache2/php.ini si vous utilisez PHP5, /etc/php4/apache2/php.ini si vous utilisez PHP4) pour voir s’il y a des entrées pour php-clamavlib. Celles-ci devraient ressembler à ceci :

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 vous êtes sur Debian Sarge, vous pouvez installer le paquet php-clamavlib depuis backports.org : http://www.backports.org/debian/pool/main/p/php-clamavlib/

4 Fonctions php-clamavlib

Il n’y a pas de documentation sur les fonctions PHP fournies par php-clamavlib, mais j’ai trouvé un script appelé clamav.php dans le code source de php-clamavlib qui montre quelles fonctions sont disponibles. Nous créons maintenant le même script dans notre répertoire /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 = "Module $module n'est pas compilé dans PHP"; } echo "$str\n"; ?>
|

Maintenant, tapez http://192.168.0.100/clamav.php dans votre navigateur. La sortie devrait ressembler à ceci :

Fonctions disponibles dans l’extension de test :
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

Erreur fatale : Appel à une fonction indéfinie confirm_clamav_compiled() dans /var/www/clamav.php à la ligne 14

Vous pouvez ignorer l’erreur fatale à la dernière ligne.

Maintenant, nous savons quelles fonctions sont disponibles, mais nous ne savons pas quels paramètres elles nécessitent. J’ai trouvé cette page : http://www.clamav.net/doc/0.88.4/html/node41.html qui décrit des fonctions similaires dans le code source de ClamAV. En testant et en lisant cette page, j’ai découvert comment utiliser les fonctions cl_info(), cl_scanfile(), cl_setlimits() et clam_get_version(). Ce sont toutes les fonctions dont nous avons besoin pour scanner les fichiers téléchargés (en fait, nous aurions seulement besoin de cl_scanfile()). Dans le chapitre suivant, nous créerons un petit formulaire HTML de téléchargement et utiliserons ces fonctions pour scanner les fichiers téléchargés à la recherche de virus.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.