Tom: datei hochladen jpg

Beitrag lesen

Hello,

...und auf Linux-Servern gibt es i.d.R. das schlaue Programm file, »» das wirklich fast jeden Typ kennt.

Kann man das mittels exec() auf dem Server aufrufen und für solche Zwecke verwenden?

Ja, man sollte es aber als Kopie im User_exec_dir (oder wie das genau heißt...) ablegen. Schau mal in der INI nach.

Und dann sollte man noch einige Sicherungen einbauen, um auch den Fehlercode des Programms abfragen zu können. Man muss einige Parameter setzen, damit die Ausgabe vernünftig verwertbar wird in PHP aber das steht alles in der Hilfe und in man von file.

Wahrscheinlich wirst Du system() benutzen müssen, da exec() mMn nur die letzte Zeile von der Ausgabe zurückgibt.

Und wenn man sich ausführbare (compilierte) Programme schützen will, dann hilft es, in den ersten 256 Bytes des Files nach einer ASCII-0 zu suchen. Wenn eine drin ist, wird es mit hoher Sicherheit keine HTML-Datei sein.

Ok, d.h. ich kann das hochgeladene File per PHP auslesen und die ersten 256 Zeichen auf ein ASCII-0 durchsuchen? Da ich Dateiuploads bisher nur für Adminbereiche eingesetzt habe, hatte ich bisher noch nicht die Notwendigkeit gesehen das so genau zu checken. Aber ok, guter Tipp, werde ich mir merken und beim nächsten mal auch anwenden, bzw. bestehende Scripte entsprechend umschreiben.

Das ist zwar keine Garantie dafür, dass es nicht ein Script ist, aber man kann zumindest schon mal die direkt Prozessor ausführbaren Progs abfangen und die Prüfung geht schnell. Einfach

...
fread($fh,$block,256);

if (strpos($block,chr(0))!== false)
{
  ## böses Programm
  exit;
}

Liebe Grüße aus http://www.braunschweig.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen