Avant de traiter une pièce jointe téléchargée depuis le navigateur, il est souvent intéressant de rechercher si elle contient un virus ou non. La recherche antivirale s'effectue avec le logiciel Clamav (http://www.clamav.net), un antivirus opensource fonctionnant sur toutes plates-formes.
Clamav est en principe disponible dans les dépôts des distributions classiques. Consultez néanmoins ce document, qui vous permettra notament de tester si votre installation est correcte :
https://wiki.archlinux.org/index.php/ClamAV
Installez les bibliothèques de développement pour php5 et clamav :
sudo apt-get install php5-devsudo apt-get install libclamav-devTéléchargez php-clamav à partir de http://sourceforge.net/projects/php-clamav, puis compilez le module :
cd /tmptar xvzf php-clamav-0.15.8.tar.gzcd php-clamav-0.15.8phpize./configure --with-clamavmakeInstallez ensuite le module dans un dossier de votre serveur :
sudo mkdir -p /usr/local/lib/php5/extensionssudo cp modules/clamav.so /usr/local/lib/php5/extensions/Éditez le fichier /etc/php5/apache2/php.ini et, dans la section Dynamic Extensions, rajoutez l'entrée :
extension=/usr/local/lib/php5/extensions/clamav.soRedémarrez le serveur Apache :
sudo service apache2 restartRécupérez le fichier de test :
wget -O- http://www.eicar.org/download/eicar.com.txt > /tmp/testvirus.txtModifiez ensuite le fichier phpclamav_test.php, en remplaçant le nom du fichier à tester par :
$file = "/tmp/testvirus.txt";Recopiez le fichier phpclamav_test.php dans un dossier du serveur, par exemple :
sudo cp phpclamav_test.php /var/www/html/Dans un navigateur, lancez le programme de test :
http://localhost/phpclamav_test.php
Le programme doit retourner les informations suivantes :
Functions available in the test extension :cl_infocl_scanfilecl_enginecl_pretcodecl_versioncl_debugClamAV version 0.98.7 with 4078886 virus signatures loadedcl_info() return : cl_version() return : 0.98.7cl_pretcode(CL_CLEAN) return : virus not foundcl_pretcode(CL_VIRUS) return : virus foundExecution time : 6.89 secondsFile path : /tmp/testvirus.txtReturn code : virus foundVirus found name : Eicar-Test-SignatureLa commande phpinfo() doit également afficher une entrée pour clamav.
Voici un exemple de code, réalisé à partir de la documentation de php-clamav :
$virus = false;if (extension_loaded ( 'clamav' )) {$retcode = cl_scanfile ( $file ["tmp_name"], $virusname );if ($retcode == CL_VIRUS) {$virus = true;$texte_erreur = $file ["name"] . " : " . cl_pretcode ( $retcode ) . ". Virus found name : " . $virusname;echo $texte_erreur;}}if ($virus == false) {/* * Suite du traitement */Le programme fonctionnera, que le module clamav soit activé ou non.