Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden
0800 1 255 255

Virenüberprüfung beim Upload von Dateien mit ModSecurity und Apache

Um in einer Webanwendung sicher­zu­stel­len, dass die Nutzer kei­nen Viren oder andere Schädlinge durch Uploads ein­schleu­sen, gibt es ver­schie­den Möglichkeiten. Eine Möglichkeit ist es, in der Webanwendung selbst eine Virenüberprüfung anzu­stos­sen. Eine Alternative ist es, die Virenprüfung in einem vor­ge­schal­te­nem Apache vorzunehmen.

Diese Funktionalität kann mit dem Modul ModSecurity für den Apache erreicht wer­den. Dieses erkennt bei einem Request des Clients mit­ge­sen­dete Dateien. Durch bestimmte Filterregeln kann ModSecurity so kon­fi­gu­iert wer­den, dass ein Script auf dem Server auf­ge­ru­fen wird:

SecRule FILES_TMPNAMES "@inspectFile /usr/local/share/clamav/modsecurity-clamav.pl" t:none,redirect:'%{REQUEST_FILENAME}?error=virus'

Diese Regel bewirkt, dass jede mit­ge­sen­dete Datei auf der Festplatte zwi­schen­ge­spei­chert wird, und das Script aus­ge­führt wird. Das Script selbst wie­der­rum ruft den Virenscanner auf, und parst das Ergebnis. Je nach dem ob ein Virus erkannt wird, wird '0' oder '1' zurück­ge­ge­ben. Wenn kein Virus gefun­den wurde, wird der Request wie gewohnt fort­ge­setzt. Im Fehlerfall wird eine defi­nierte Aktion aus­ge­führt, wie z. B. die Weiterleitung zu einer Fehlerseite, die dem Nutzer eine Fehlermeldung aus­gibt. In dem Beispiel wird ein Redirect mit der Request URL und einem Parameter error=virus zum Client gesendet.

Als Virenscanner emp­fiehlt sich der OpenSource Virenscanner ClamAV der für ver­schie­denste Systeme zur Verfügung steht. Das bereits oben beschrie­ben Script modsecurity-clamav.pl über­nimmt den Aufruf und das Parsen des Scanneoutputs. Ein Beispiel Script fin­det sich hier.

Wenn noch keine Apache vor­han­den ist, muss die­ser als Reverse Proxy kon­fi­gu­riert wer­den. Anfragen an den Apache müs­sen dabei an die eigent­li­che Webanwendung wei­ter­ge­lei­tet wer­den. Zusätzlich muss ein URL Rewriting der Webanwendungsresponse statt­fin­den. Dies ist z. B. hier beschrieben.

Related Posts

Pin It on Pinterest