You are not logged in.

Saturday, March 21st 2009, 7:52pm

Tags

clamav, virenprüfung, virus

Abstract

In diesem HowTo wird erklärt wie ihr mit der PHP Bibliothek php-clamav eine automatische Virenprüfung eurer Dateien macht.

Article

Dieses HowTo ist zwar auf den Upload über HTML Formulare spezialisiert, doch nach dem Bearbeiten dieses HowTos solltet ihr außerdem in der Lage sein auch Ordner nach Viren zu prüfen.

Als Voraussetzung benötigt ihr die Blibliothek php5-clamavlib. Wenn ihr über eine aktuelle Debian Distribution verfügt, könnt ihr das Paket mit einem Paketmanager installieren. Abhängigkeiten wie der eigentliche Virenscanner ClamAV werden dann automatisch gelöst.

Hier z.B. die Installation auf einem aktuellen Ubuntu:

Quoted

sudo apt-get install php5-clamavlib
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut
Reading state information... Fertig
Die folgenden zusätzlichen Pakete werden installiert:
libclamav1 libgmp3c2
Vorgeschlagene Pakete:
clamav-freshclam
Die folgenden NEUEN Pakete werden installiert:
libclamav1 libgmp3c2 php5-clamavlib
0 aktualisiert, 3 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
Es müssen 714kB Archive geholt werden.
Nach dem Auspacken werden 1315kB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren [J/n]=]


Nach der Installation startet ihr am besten den Server neu

Bash

1
/etc/init.d/apache2 restart


Wenn die Installation erfolgreich war stehen euch in PHP neue Funktionen zur Verfügung.
Da wären z.B. 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.

Da die Funktion einen String zurück gibt, verwendet ihr am besten clam_get_version() um die korrekte Installation sicherzustellen.

1. Upload Formular


Im nächsten Schritt erstellen wir das Upload Formular.

Bis auf die Zeilen 4 und 5 sollte das Script klar sein. Die Zeilen 4 und 5 werden später erläutert.

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
if(isset($_POST)) {
 
	cl_setlimits(5, 1000, 200, 0, 10485760);
	if($clamav = cl_scanfile($_FILES['datei']['tmp_name'])) 
		die('Virus gefunden: '.$clamav.'<br />ClamAV version: '.clam_get_version());
	else {
		move_uploaded_file($_FILES['datei']['tmp_name'], $_FILES['datei']['name']);
		echo "Datei erfolgreich hochgeladen";
	}
  }
}
?>
<html>
<head>
 <title>Datei Upload mit automatischer Virenprüfung</title>
</head>
 
<body>
 
<form method="post" enctype="multipart/form-data">
 
	<input type="file" name="datei" />
	<input type="submit" />
 
</form>
</body>
</html>


Der Konstruktur von cl_setlimits sieht im Einzelnen wie folgt aus: cl_setlimits($maxreclevel, $maxfiles, $maxratio, $archivememlim, $maxfilesize)
  • $maxreclevel: Maximaler Rekursionslevel (beim Scannen von Ordnern)
  • $maxfiles: Maximale Anzahl an Dateien die gescannt werden sollen
  • $maxratio: Maximale Kompressionsstufe
  • $archivememlim: Begrenze die Speichernutzung für bzip2 (true/false)
  • $maxfilesize: Nur die ersten * Bytes von Dateien werden gescannt.


2. Weblinks



Lexikon 4.1.3, developed by www.viecode.com