Mailinglisten-Archive |
ä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
php::bar PHP Wiki - Listenarchive