Sicurezza · 4 min read · Oct 27, 2025
Come Scansionare Automaticamente i File Caricati per Virus con php-clamavlib
Come Scansionare Automaticamente i File Caricati per Virus con php-clamavlib
Versione 1.0
Autore: Falko Timme
Questa guida descrive come puoi scansionare automaticamente i file caricati dagli utenti tramite un modulo web sul tuo server utilizzando PHP e ClamAV. In questo modo puoi assicurarti che il tuo modulo di caricamento non venga abusato per distribuire malware. Per collegare PHP e ClamAV, installiamo il pacchetto php5-clamavlib/php4-clamavlib che è piuttosto poco documentato in questo momento. Quel pacchetto è disponibile per Debian Etch e Sid e anche per Ubuntu Dapper Drake e Edgy Eft, quindi assicurati di utilizzare una di queste piattaforme.
Voglio dire prima che questo non è l’unico modo per impostare un sistema del genere. Ci sono molti modi per raggiungere questo obiettivo, ma questo è il modo che seguo. Non fornisco alcuna garanzia che questo funzionerà per te!
1 Nota Preliminare
Come ho detto prima, il tuo sistema deve utilizzare Debian Etch, Sid, Ubuntu Dapper Drake o Ubuntu Edgy Eft, e dovresti già avere Apache2 e PHP4 o PHP5 installati.
Se sei su Debian Sarge, puoi installare il pacchetto php-clamavlib da backports.org: http://www.backports.org/debian/pool/main/p/php-clamavlib/
Presumo che tu utilizzi /var/www come la radice del documento predefinita. Se hai già più siti web sul tuo server, adatta la radice del documento alle tue esigenze. Inoltre, utilizzo 192.168.0.100 come indirizzo IP del mio server in questo esempio. Adatta anche questo, e se hai più siti web con una configurazione vhost basata su nome, devi utilizzare il rispettivo dominio/FQDN per accedere al sito web invece dell’indirizzo IP.
Eseguo tutti i passaggi qui come utente root. Quindi assicurati di essere connesso come root o, se sei su Ubuntu, precedi tutti i comandi con sudo, ad esempio.
apt-get updatediventerebbe
sudo apt-get update 2 Modifica /etc/apt/sources.list
Se utilizzi Ubuntu Dapper Drake o Ubuntu Edgy Eft, devi modificare /etc/apt/sources.list in modo che il repository universe sia abilitato. Se sei su Debian Etch o Sid, allora non modificare /etc/apt/sources.list.
2.1 Ubuntu Dapper Drake
Modifica /etc/apt/sources.list e assicurati di avere la riga deb http://de.archive.ubuntu.com/ubuntu/ dapper universe in essa (sostituisci de.archive.ubuntu.com con un mirror di Ubuntu vicino a te):
vi /etc/apt/sources.list| [...] deb http://de.archive.ubuntu.com/ubuntu/ dapper universe [...] |
Poi esegui
apt-get updateper aggiornare il database dei pacchetti.
2.2 Ubuntu Edgy Eft
Modifica /etc/apt/sources.list e assicurati di avere la riga deb http://de.archive.ubuntu.com/ubuntu/ edgy universe in essa (sostituisci de.archive.ubuntu.com con un mirror di Ubuntu vicino a te):
vi /etc/apt/sources.list| [...] deb http://de.archive.ubuntu.com/ubuntu/ edgy universe [...] |
Poi esegui
apt-get updateper aggiornare il database dei pacchetti.
3 Installa ClamAV e php-clamavlib
Successivamente installiamo ClamAV (il nostro scanner di virus) e php-clamavlib, il pacchetto che fornisce il collegamento tra PHP e ClamAV.
Se utilizzi PHP5, esegui:
apt-get install php5-clamavlib clamav clamav-freshclam clamav-docs arj unzoo Se utilizzi PHP4, esegui:
apt-get install php4-clamavlib clamav clamav-freshclam clamav-docs arj unzoo Poi riavvia Apache:
/etc/init.d/apache2 restartSe vuoi, puoi dare un’occhiata al tuo php.ini ( /etc/php5/apache2/php.ini se utilizzi PHP5, /etc/php4/apache2/php.ini se utilizzi PHP4) per vedere se ci sono voci per php-clamavlib. Queste dovrebbero apparire così:
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 |
Se sei su Debian Sarge, puoi installare il pacchetto php-clamavlib da backports.org: http://www.backports.org/debian/pool/main/p/php-clamavlib/
4 Funzioni di php-clamavlib
Non c’è documentazione sulle funzioni PHP fornite da php-clamavlib, ma ho trovato uno script chiamato clamav.php nel codice sorgente di php-clamavlib che mostra quali funzioni sono disponibili. Creiamo ora lo stesso script nella nostra directory /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 = "Modulo $module non è compilato in PHP"; } echo "$str\n"; ?>
Ora digita in http://192.168.0.100/clamav.php nel tuo browser. L’output dovrebbe apparire così:
Funzioni disponibili nell’estensione di 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
Fatal error: Call to undefined function confirm_clamav_compiled() in /var/www/clamav.php on line 14Puoi ignorare l’errore fatale nell’ultima riga.
Ora sappiamo quali funzioni sono disponibili, ma non sappiamo quali parametri necessitano. Ho trovato questa pagina: http://www.clamav.net/doc/0.88.4/html/node41.html che descrive funzioni simili nel codice sorgente di ClamAV. Testando e leggendo quella pagina ho scoperto come utilizzare le funzioni cl_info(), cl_scanfile(), cl_setlimits() e clam_get_version(). Queste sono tutte le funzioni di cui abbiamo bisogno per scansionare i file caricati (in effetti avremmo bisogno solo di cl_scanfile()). Nel capitolo successivo creeremo un piccolo modulo HTML di caricamento e utilizzeremo queste funzioni per scansionare i file caricati per virus.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.