Virenscanner · 4 min read · Oct 27, 2025

Wie man hochgeladene Dateien automatisch auf Viren mit php-clamavlib scannt

Wie man hochgeladene Dateien automatisch auf Viren mit php-clamavlib scannt

Version 1.0
Autor: Falko Timme

Dieser Leitfaden beschreibt, wie Sie Dateien, die von Benutzern über ein Webformular auf Ihrem Server hochgeladen wurden, automatisch mit PHP und ClamAV scannen können. So können Sie sicherstellen, dass Ihr Upload-Formular nicht missbraucht wird, um Malware zu verbreiten. Um PHP und ClamAV zu verbinden, installieren wir das Paket php5-clamavlib/php4-clamavlib, das zu diesem Zeitpunkt eher undocumented ist. Dieses Paket ist für Debian Etch und Sid sowie für Ubuntu Dapper Drake und Edgy Eft verfügbar, also stellen Sie sicher, dass Sie eine dieser Plattformen verwenden.

Ich möchte zuerst sagen, dass dies nicht der einzige Weg ist, ein solches System einzurichten. Es gibt viele Möglichkeiten, dieses Ziel zu erreichen, aber dies ist der Weg, den ich wähle. Ich gebe keine Garantie, dass dies bei Ihnen funktioniert!

1 Vorbemerkung

Wie bereits erwähnt, muss Ihr System Debian Etch, Sid, Ubuntu Dapper Drake oder Ubuntu Edgy Eft verwenden, und Sie sollten bereits Apache2 und PHP4 oder PHP5 installiert haben.

Wenn Sie Debian Sarge verwenden, können Sie das php-clamavlib-Paket von backports.org installieren: http://www.backports.org/debian/pool/main/p/php-clamavlib/

Ich gehe davon aus, dass Sie /var/www als das Standard-Dokumentenverzeichnis verwenden. Wenn Sie bereits mehrere Websites auf Ihrem Server haben, passen Sie das Dokumentenverzeichnis an Ihre Bedürfnisse an. Außerdem verwende ich 192.168.0.100 als die IP-Adresse meines Servers in diesem Beispiel. Passen Sie dies ebenfalls an, und wenn Sie mehrere Websites mit einer namensbasierten vhost-Konfiguration haben, müssen Sie die jeweilige Domain/FQDN verwenden, um auf die Website zuzugreifen, anstatt die IP-Adresse.

Ich führe alle Schritte hier als Root-Benutzer aus. Stellen Sie also sicher, dass Sie als Root angemeldet sind oder, wenn Sie Ubuntu verwenden, alle Befehle mit sudo voranstellen, z.B.

apt-get update

würde zu

sudo apt-get update  

2 Ändern Sie /etc/apt/sources.list

Wenn Sie Ubuntu Dapper Drake oder Ubuntu Edgy Eft verwenden, müssen Sie /etc/apt/sources.list ändern, damit das Universe-Repository aktiviert ist. Wenn Sie Debian Etch oder Sid verwenden, bearbeiten Sie /etc/apt/sources.list nicht.

2.1 Ubuntu Dapper Drake

Bearbeiten Sie /etc/apt/sources.list und stellen Sie sicher, dass Sie die Zeile deb http://de.archive.ubuntu.com/ubuntu/ dapper universe darin haben (ersetzen Sie de.archive.ubuntu.com durch einen Ubuntu-Spiegel in Ihrer Nähe):

vi /etc/apt/sources.list

| [...] deb http://de.archive.ubuntu.com/ubuntu/ dapper universe [...] |

Führen Sie dann aus

apt-get update

um die Paketdatenbank zu aktualisieren.

2.2 Ubuntu Edgy Eft

Bearbeiten Sie /etc/apt/sources.list und stellen Sie sicher, dass Sie die Zeile deb http://de.archive.ubuntu.com/ubuntu/ edgy universe darin haben (ersetzen Sie de.archive.ubuntu.com durch einen Ubuntu-Spiegel in Ihrer Nähe):

vi /etc/apt/sources.list

| [...] deb http://de.archive.ubuntu.com/ubuntu/ edgy universe [...] |

Führen Sie dann aus

apt-get update

um die Paketdatenbank zu aktualisieren.

3 Installieren Sie ClamAV und php-clamavlib

Als nächstes installieren wir ClamAV (unseren Virenscanner) und php-clamavlib, das Paket, das die Verbindung zwischen PHP und ClamAV bereitstellt.

Wenn Sie PHP5 verwenden, führen Sie aus:

apt-get install php5-clamavlib clamav clamav-freshclam clamav-docs arj unzoo 

Wenn Sie PHP4 verwenden, führen Sie aus:

apt-get install php4-clamavlib clamav clamav-freshclam clamav-docs arj unzoo 

Starten Sie dann Apache neu:

/etc/init.d/apache2 restart

Wenn Sie möchten, können Sie einen Blick in Ihre php.ini werfen ( /etc/php5/apache2/php.ini, wenn Sie PHP5 verwenden, /etc/php4/apache2/php.ini, wenn Sie PHP4 verwenden), um zu sehen, ob es Einträge für php-clamavlib gibt. Diese sollten so aussehen:

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 |

Wenn Sie auf Debian Sarge sind, können Sie das php-clamavlib-Paket von backports.org installieren: http://www.backports.org/debian/pool/main/p/php-clamavlib/

4 php-clamavlib Funktionen

Es gibt keine Dokumentation über die von php-clamavlib bereitgestellten PHP-Funktionen, aber ich habe ein Skript namens clamav.php im Quellcode von php-clamavlib gefunden, das zeigt, welche Funktionen verfügbar sind. Wir erstellen jetzt dasselbe Skript in unserem /var/www-Verzeichnis:

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 = "Modul $module ist nicht in PHP kompiliert"; } echo "$str\n"; ?>
|

Jetzt geben Sie http://192.168.0.100/clamav.php in Ihrem Browser ein. Die Ausgabe sollte so aussehen:

Funktionen, die in der Testerweiterung verfügbar sind:
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 14

Sie können den fatalen Fehler in der letzten Zeile ignorieren.

Jetzt wissen wir, welche Funktionen verfügbar sind, aber wir wissen nicht, welche Parameter sie benötigen. Ich habe diese Seite gefunden: http://www.clamav.net/doc/0.88.4/html/node41.html, die ähnliche Funktionen im Quellcode von ClamAV beschreibt. Durch Testen und Lesen dieser Seite habe ich herausgefunden, wie man die Funktionen cl_info(), cl_scanfile(), cl_setlimits() und clam_get_version() verwendet. Das sind alle Funktionen, die wir benötigen, um hochgeladene Dateien zu scannen (tatsächlich würden wir nur cl_scanfile() benötigen). Im nächsten Kapitel werden wir ein kleines HTML-Upload-Formular erstellen und diese Funktionen verwenden, um hochgeladene Dateien auf Viren zu scannen.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.