Tous les systèmes d’exploitation sont vulnérables aux virus et l’upload de fichiers via une application web est une porte d’entrée idéale pour ces derniers.
Aujourd’hui je vous propose un petit tutoriel pour utiliser l’antivirus ClamAV sur un site développé en Symfony2 et qui tourne sur un OS Linux.
Pourquoi ClamAv et pas une autre solution me direz-vous ? Malheureusement les antivirus open-source et gratuits sous Linux ne sont pas légions, j’ai donc opté pour le plus populaire d’entre eux.
Lorsque nous laissons la possibilité aux utilisateurs de pouvoir uploader des fichiers, il est préférable de scanner ces fichiers afin de s’assurer qu’aucun virus n’y est présent.
Nous allons donc voir comment mettre ce contrôle en place.
Installation de ClamAv
Commençons par le commencement, l’installation de l’antivirus.
Voici la liste des modules à installer :
- clamav
- clamav-daemon
- clamav-freshclam
Pour ce faire, sous Debian, exécutez les commandes suivantes (adapter en fonction de la distribution utilisée) :
Une fois les 3 modules installés, une mise à jour de la base de virus s’impose. Pour cela, lancez la commande suivante :
Si vous voulez avoir plus d’informations quant à l’installation ou l’utilisation de l’outil en ligne de commande, je vous invite à vous rendre sur cette documentation : https://doc.ubuntu-fr.org/clamav
Intégration à Symfony 2
Commençons par créer une interface qui décrira la signature attendue de classe chargée de piloter l’antivirus.
Ecrivons ensuite la classe implémentant cette interface.
Cette implémentation pilotera l’utilitaire en ligne de commande via le composant Process de Symfony2.
Libre à vous d’adapter cette implémentation pour piloter un autre antivirus, il suffit de modifier la commande liée.
On déclare ensuite notre service pour pouvoir l’utiliser en tant que tel.
Je vous propose ensuite de déclarer une classe StringUtils qui va nous permettre de « slugifier » le nom du fichier que l’on vient d’uploader. Cela évitera de se retrouver avec des noms contenant des caractères spéciaux qui nous compliqueront la tâche par la suite.
Tout est prêt !
Voyons maintenant comment utiliser ces différents composants.
Admettons que vous ayez un formulaire avec 2 champs : un titre et une pièce jointe.
Une fois le formulaire validé (c’est-à-dire que le champ titre est bien renseigné et que le document à bien été renseigné par exemple), le code suivant permet de vérifier le fichier uploadé.
La méthode « isFileSafe() » est en charge de vérifier la présence ou non d’un virus dans le fichier uploadé. Si celui-ci est corrompu, il est directement supprimé.
Voilà un moyen simple mais efficace de se protéger contre les virus sur un projet Symfony2 !