phpbar.de logo

Mailinglisten-Archive

[php] Virenscanner und PHP-Upload

[php] Virenscanner und PHP-Upload

I.Eyring ingoeyring at googlemail.com
Sa Jun 8 23:18:35 CEST 2013


ähm ja, das siehst du (fast) richtig:

Standardmäßig werden Dateien in dem standardmäßigen temporären Verzeichnis 
des Servers gespeichert, außer es wurde mittels upload_tmp_dir in der 
php.ini ein anderer Ort konfiguriert. Das Standardverzeichnis des Servers 
kann durch das Setzen der Umgebungsvariablen TMPDIR in der Umgebung, in der 
PHP ausgeführt wird, geändert werden.




----- Original Message ----- 
From: "Peter Linzenkirchner" <liste at lisardo.de>
To: "deutschsprachige PHP-Mailingliste" <php at lists.phpbar.de>
Sent: Tuesday, June 04, 2013 4:53 PM
Subject: [php] Virenscanner und PHP-Upload


Hallo LIste,

ich habe folgendes Problem:

ein Kunde betreibt einen Intranet-Rechner als Webserver. Darauf läuft php 
5.3.21, ausserdem ein Virenscan. Nun passiert es in letzter Zeit häufig, 
dass solche Aufrufe im Access-Log auftauchen:

/admin/categories.php/login.php?cPath=&action=new_product_preview
Dieser Aufruf erfolgt über POST und angehängt ist ein Trojaner mit einer 
PHP-Shell.

Da per htaccess alle Aufrufe auf die index.php weitergeleitet werden, landet 
dieser Trojaner automatisch im /tmp/-Verzeichnis. Das PHP-Skript verarbeitet 
das $_FILES-Array aber gar nicht (es ist kein Upload vorgesehen), insofern 
wird der Trojaner bei Skriptende wieder aus dem tmp-Verzeichnis gelöscht und 
nicht in die Web-Root verschoben. Bzw. würde, weil nämlich vorher bereits 
der Virenscanner reagiert, den Server anhält, die Datei aus dem 
tmp-Verzeichnis löscht und allerlei Warnungen ausgibt. Der Scanner ist also 
schneller als das PHP-Skript (das braucht schon mal ein paar Sekunden).

Ich habe daraufhin folgenden Test gemacht:

ein PHP-Skript mit diesem Inhalt:
<?php
while ($i=1) {}
?>
Und ein Formular mit diesem Inhalt:

<form action="index.php" method="post" enctype="multipart/form-data">
<input name="irgendwas" type="file"><br>
<p><input type="submit" value="Senden" /></p>
</form>

Ich rufe das Formular auf, übergebe eine Datei und sende ab. Ergebnis: Ich 
erhalte eine Datei im tmp-Verzeichnis /tmp/phpPeQqSZ und zwar bis zu dem 
Augenblick, in dem ich das Skript abbreche, oder bis PHP über den Timeout 
das Skript abbricht.

Ergo kann man diesen Upload in das tmp-Verzeichnis überhaupt nicht 
verhindern, er scheint ein autmatisches Feature von PHP zu sein. (Oder auch 
von Apache, das weiß ich nicht).

---

Meine Frage ist jetzt, ob ich die Abläufe richtig verstehe:

Wenn in der php.ini der file_upload erlaubt ist, dann wird _immer_ wenn ein 
PHP-Skript aufgerufen wird mit angehängtem $_FIlES-Array diese Datei in den 
tmp-Ordner verschoben, egal, was das Skript sonst tut. Das ist also das 
Standardverhalten von PHP und nur verhinderbar über ein generelles 
file_upload-Verbot in der php.ini.

Ist das so richtig, oder fehlt mir hier das richtige Verständnis der 
Abläufe?

vielen Dank
Peter

--
Xing: http://www.xing.com/profile/Peter_Linzenkirchner
Web: http://www.typo3-lisardo.de
Facebook: http://tinyurl.com/lisardo-multimedia

-- 
** Allgemeine deutschsprachige PHP-Liste: php at lists.phpbar.de **
Informationen: http://www.phpbar.de
http://lists.phpbar.de/cgi-bin/mailman/listinfo/php 



Mehr Informationen über die Mailingliste php

php::bar PHP Wiki   -   Listenarchive