Sicurezza · 4 min read · Dec 08, 2025
Come Scansionare Automaticamente i File Caricati per Virus con php-clamavlib - Pagina 2
5 Un Piccolo Esempio
Ora creeremo un piccolo script di upload, /var/www/upload.php, che contiene un modulo HTML per il caricamento. Se invii il modulo, lo script chiamerà se stesso e utilizzerà cl_info(), cl_scanfile(), cl_setlimits() e clam_get_version() per scansionare il file caricato per virus. Se il file è ok, verrà caricato in /var/www/uploads, altrimenti lo script visualizzerà un messaggio di errore (indicando quale virus/verme ecc. ha trovato) e cancellerà il file sul server.
Prima di tutto, dobbiamo creare la directory /var/www/uploads e renderla scrivibile dal nostro utente Apache, www-data:
mkdir /var/www/uploads
chown www-data:www-data /var/www/uploads
Poi creiamo il file /var/www/upload.php:
vi /var/www/upload.php| Versione ClamAV: '.clam_get_version(); } if($error == ''){ rename($_FILES['file']['tmp_name'], $upload_dir.$_FILES['file']['name']); } } ?> |
Contiene il modulo per caricare un file:
| [...] [...] |
Dopo aver selezionato un file e cliccato sul pulsante Invia, lo script si chiamerà da solo ( action=”upload.php”) ed eseguirà il codice PHP in cima:
| [...] if($_POST){ $error = ''; //print_r($_FILES); if($_FILES['file']['size'] == 0 || !is_file($_FILES['file']['tmp_name'])){ $error .= 'Per favore seleziona un file da caricare!'; } else { cl_setlimits(5, 1000, 200, 0, 10485760); if($malware = cl_scanfile($_FILES['file']['tmp_name'])) $error .= 'Abbiamo Malware: '.$malware.' |
Versione ClamAV: '.clam_get_version(); } if($error == ''){ rename($_FILES['file']['tmp_name'], $upload_dir.$_FILES['file']['name']); } } [...]
I dettagli sul file caricato sono salvati nell’array $_FILES, quindi lo usiamo per controllare il file (puoi decommentare la riga print_r($_FILES); per vedere cosa è memorizzato nell’array).
Uso la funzione cl_setlimits() per impostare i limiti per il processo di scansione dei virus al fine di prevenire attacchi DOS (dove il processo di scansione dei virus potrebbe consumare tutte le risorse del sistema). L’uso è il seguente:
cl_setlimits($maxreclevel, $maxfiles, $maxratio, $archivememlim, $maxfilesize) - $maxreclevel: valore intero / livello massimo di ricorsione /
- $maxfiles: valore intero / numero massimo di file da scansionare all’interno dell’archivio /
- $maxratio: valore intero / rapporto di compressione massimo /
- $archivememlim: booleano / limita l’uso della memoria per bzip2 (0/1) /
- $maxfilesize: intero lungo / i file archiviati più grandi di questo valore (in byte) non verranno scansionati /
Fondamentalmente, questi valori definiscono il comportamento di ClamAV se vengono scansionati archivi (file zip, file tar.gz, file bz2, ecc.). Se non utilizzi la funzione cl_setlimits(), i valori rispettivi vengono presi dal php.ini.
La funzione principale è la funzione cl_scanfile() che prende il percorso del file da scansionare come argomento. I file caricati vengono salvati temporaneamente (di solito in /tmp; dipende dalle impostazioni del tuo php.ini) prima di essere elaborati. Quel file temporaneo è salvato in $_FILES[‘file’][‘tmp_name’] quindi passiamo quella variabile alla funzione cl_scanfile(). Se non viene trovato alcun virus, restituisce FALSE, altrimenti il nome del virus trovato.
clam_get_version() non prende alcun argomento. Quella funzione restituisce la versione di ClamAV installato (come 0.88.4).
Infine utilizzo la funzione cl_info() che - come clam_get_version() - non prende alcun argomento. Mostra informazioni più dettagliate su ClamAV, ad esempio la versione ClamAV 0.88.4 con 85917 firme di virus caricate.
Ora testiamo. Digita http://192.168.0.100/upload.php nel tuo browser. Dovresti vedere questo:

Clicca su Sfoglia… e seleziona un file da caricare dal tuo disco rigido (un file che non è un virus e non più grande di 2MB - questa è la dimensione massima di upload predefinita che può essere cambiata nel tuo php.ini):

Il caricamento dovrebbe avere successo, e dovresti vedere qualcosa di simile:

Ora dobbiamo ottenere un virus per testare. Fortunatamente c’è il virus di test Eicar, è un file che non fa alcun danno, ma la sua firma è stata inclusa in tutti i scanner di virus in modo da poter testare se il tuo scanner di virus funziona utilizzando quel virus di test. Vai su http://www.eicar.org/anti_virus_test_file.htm e scarica i file eicar.com, eicar_com.zip e eicarcom2.zip sul tuo disco rigido. Poi testa il caricamento con ciascuno di essi:

Se tutto va bene, php-clamavlib dovrebbe riconoscere il virus e rifiutare il caricamento:

6 Link
- php-clamavlib: http://packages.debian.org/unstable/source/php-clamavlib
- PHP: http://www.php.net
- ClamAV: http://www.clamav.net
- Apache: http://httpd.apache.org
- Virus di Test Eicar: http://www.eicar.org/anti_virus_test_file.htm
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.