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.
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.
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.
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.
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.
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.
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.
>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.
Code scheint gut und antwortet vor allem auch nett Ich möchte nur noch einen Punkt bezüglich der Sicherheit hinzufügen:
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.
Wenn es Ihnen nichts ausmacht, ein bestehendes PHP-Upload-System zu verwenden, ist dieses jQuery / PHP-Upload-Framework extrem konfigurierbar und erstaunlich.
Tags und Links php image-uploading