Sicherer Weg zum Hochladen von Bildern in PHP und HTaccess

8

Ich habe folgenden Code im Internet zum sicheren Hochladen von Bildern in PHP gefunden.

Ich möchte wissen, dass es alle möglichen Arten von Angriffen beim Hochladen von Bildern umfasst.

%Vor%

Ich habe auch eine .htaccess-Datei im Ordner "images" gespeichert, die Dateiscripts ausschaltet, so dass niemand Skripts im Fotoordner ausführen kann.

%Vor%

macht das aus Sicherheitsgründen genug, oder ich muss einige andere Schritte unternehmen, um meinen Code und meine Website zu sichern.

    
air 21.01.2013, 08:02
quelle

5 Antworten

7

Als Erstes würde ich die -Dateitypen mit Apache mod_mime überprüfen, sonst kann ich eine HTTP-Anfrage senden, die besagt: Ich bin ein JPEG-Datei! und Sie vertrauen einfach der Dateierweiterung wie Yeap! Sie haben .jpg Erweiterung , aber in Wirklichkeit kann ich den PHP-Quellcode anstelle von JPEG-Daten einfügen, und später kann ich den PHP-Quellcode auf Ihrem Server ausführen.

Die andere Sache ist, den Apache immer zu zwingen, keine dieser Bildtypen auszuführen. Sie können dies mit ForceType Direktiven tun.

%Vor%

Bearbeiten:

Ich habe die unteren Zeilen nicht gesehen. Das Ausschalten von Dateiskripten wird absolut helfen.

    
Mahdi 29.01.2013 12:42
quelle
3

Ist dieser Code sicher?

PHP

Kurz gesagt, nein, nicht unbedingt! Es gibt einen fatalen Fehler, den der Code nicht abdeckt, aber verzweifle nicht, das ist sehr leicht lösbar!

Während das Skript die Erweiterung der Datei testet, testet es nicht den MIME-Typ der Datei und könnte daher möglicherweise eine ganze Reihe von Problemen aufwerfen.

Abgesehen von dieser kleinen Sicherheitslücke ist der Code ziemlich sicher.

Apache

Es ist sehr einfach, eine HTTP-Anfrage so zu erstellen, dass sie wie eine JPEG-Datei aussieht, und obwohl PHP damit zurechtkommt, ist es manchmal besser, sicherzustellen, dass diese Schwachstelle von allen Seiten erfasst wurde. Ein einfacher Fix, der das Modul MOD_MIME in Apache verwendet, kann verwendet werden, um diesen Fehler zu beheben, wie unten erläutert.

HTTPS - Möglicherweise Irrelavent

Wenn Sie sich Sorgen machen, dass diese Dateien zwischen dem Client und dem Server eingeschnappt werden, besteht ein absolut wichtiger Teil Ihrer Sicherheit darin, ein SSL-Zertifikat auf Ihrer Website zu verwenden. Dadurch werden alle Daten zwischen dem Client und dem Server verschlüsselt.

Wenn Sie sich jedoch nur Sorgen um die Serverseite machen, ist dies nicht unbedingt notwendig, wenn auch empfohlen.

Mögliche Lösungen

Die Funktion finfo()

Die Funktion finfo() gibt den MIME-Typ der Datei zurück und gibt daher an, ob es sich um ein JPEG handelt oder nicht, und kann hochgeladen werden.

Siehe hier für weitere Informationen zu dieser Funktion.

Alternative hochladen

Persönlich bevorzuge ich die Colin Verot Upload Klasse. Diese Klasse ist extrem einfach zu bedienen, deckt alle möglichen Sicherheitsprobleme ab, verfügt über eine große Auswahl an erweiterten Funktionen mit der GD-Bibliothek und wird ständig gewartet.

Besuchen Sie Colin Verots Website hier , um die Klasse herunterzuladen und zu verwenden.

>

Apache MOD_MIME

Das Apache MOD_MIME-Modul erzwingt eine Überprüfung des MIME-Typs der Dateien, die an den Server gesendet werden.

Sehen Sie sich hier an, um weitere Informationen zu erhalten.

    
Ben Carey 31.01.2013 09:40
quelle
1

Code scheint gut und antwortet vor allem auch nett Ich möchte nur noch einen Punkt bezüglich der Sicherheit hinzufügen:

  • Sie sollten die Dateien in einem Verzeichnis speichern, das sich außerhalb des Dokumentstammverzeichnisses befindet (nicht über eine HTTP-Anforderung zugänglich) und sie über ein Skript bereitstellen, das zuerst nach der richtigen Berechtigung sucht.
s-sharma 31.01.2013 12:51
quelle
0

Da Sie alle Interpretationen von Dateien auf dem Server ausgeschaltet haben, bleibt nur noch der Dateiname übrig. Wenn Sie Ihre eigenen Namen generieren oder Benutzer-gelieferte Namen gut filtern, müssen Sie sich keine Sorgen machen.

Nun ... fast nichts. Möglicherweise liegt ein Sicherheitsfehler in der GD-Bibliothek vor, so dass bei der Verwendung von böswilligen Bildern während der Größenänderung möglicherweise ein Fehler auftritt. Aber es ist nicht etwas, das Sie von PHP aus behandeln können, also halten Sie den Server auf dem neuesten Stand.

    
Josef Kufner 30.01.2013 03:44
quelle
-1

Wenn es Ihnen nichts ausmacht, ein bestehendes PHP-Upload-System zu verwenden, ist dieses jQuery / PHP-Upload-Framework extrem konfigurierbar und erstaunlich.

Ссылка

    
colonelclick 30.01.2013 22:52
quelle

Tags und Links