Der Martin: Dateiupload und Sicherheit / lesbarer

Beitrag lesen

Hi,

eins vorweg: Du hättest deinen ersten Beitrag editieren können, anstatt ihn ein zweites Mal zu posten. Da es offensichtlich ist, dass dies hier eine korrigierte Fassung des vorangegangenen Postings ist, habe ich das mal gelöscht.

ich möchte meinen Usern einen Dateiupload anbieten. Es sollen nur Bilddateien und PDF erlaubt sein.

Okay.

Meine Frage, reicht es nciht aus, folgende .htaccess anzulegen?

Nein. Die hat eigentlich nichts mit deinem Ansinnen zu tun, widerspricht teilweise sogar.

# Ausführung von PHP unterbinden
php_flag engine off

# Abschalten: cgi, SSI, Auflisten von Inhalten
Options -ExecCGI -Includes -Indexes

# Ausliefern von .php, .php3 und .cgi - Dateien unterbinden
<Files ~ "\.(php3?|cgi)$">
  deny from all
</Files>

# Nur Bild-Dateien: *.jpg, *.png, *.gif, *.pdf sind erlaubt, 
# alle anderen sind nicht lesbar
order deny,allow
deny from all
<Files ~ ".+\.(jpg|png|gif|pdf)$">
 allow from all
</Files>

Zunächst mal: Ausführung von PHP unterbinden? Womit willst du dann die hochgeladenen Dateien annehmen, prüfen und verarbeiten (z.B. im gewünschten Verzeichnis ablegen)?

Dann: Alle Direktiven, die du notiert hast, betreffen nur den Abruf von PDF- und Bilddateien vom Server, nicht den Upload solcher Dateien (abgesehen davon, dass Bilddateien auch noch andere Extensions habekönnen als die von dir aufgezählten).

Der Ansatz muss daher anders sein. Der eigentliche Upload wird als POST-Request vermutlich ein PHP-Script aufrufen. Dieses Script muss die angelieferte Datei daraufhin überprüfen, ob sie wirklich in die Menge der erlaubten Typen passt. Dazu genügt es nicht, den Namen bzw. die Extension anzuschauen, auch der vom Browser gesendete MIME-Typ kann Bullshit sein. Du müsstest tatsächlich den Dateiinhalt prüfen. Bilddateien erkennt man beispielsweise daran, dass getimagesize() plausible Werte liefert; PDF-Dokumente erkennt man daran, dass sie mit dem String "PDF%" beginnen.

So long,
 Martin