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-dev
sudo apt-get install libclamav-dev
Téléchargez php-clamav à partir de http://sourceforge.net/projects/php-clamav, puis compilez le module :
cd /tmp
tar xvzf php-clamav-0.15.8.tar.gz
cd php-clamav-0.15.8
phpize
./configure --with-clamav
make
Installez ensuite le module dans un dossier de votre serveur :
sudo mkdir -p /usr/local/lib/php5/extensions
sudo 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.so
Redémarrez le serveur Apache :
sudo service apache2 restart
Récupérez le fichier de test :
wget -O- http://www.eicar.org/download/eicar.com.txt > /tmp/testvirus.txt
Modifiez 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_info
cl_scanfile
cl_engine
cl_pretcode
cl_version
cl_debug
ClamAV version 0.98.7 with 4078886 virus signatures loadedcl_info() return :
cl_version() return : 0.98.7
cl_pretcode(CL_CLEAN) return : virus not found
cl_pretcode(CL_VIRUS) return : virus found
Execution time : 6.89 seconds
File path : /tmp/testvirus.txt
Return code : virus found
Virus found name : Eicar-Test-Signature
La 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.