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 updatewü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 updateum 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 updateum 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 restartWenn 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 14Sie 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.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.