2017-02-18 5 views
0

Es gibt ein Upload-Formular auf meiner Website. Ich schließe eigentlich Dateitypen nicht wirklich ein oder aus.Hochladen der Website verhindern Hacking

Statt dieses Ich verwende:

$fileUploadName = $target_dir.md5(uniqid($target_file.rand(),true)).".".$imageFileType; 

dass der Dateityp halten aber den Dateinamen zu einem zufälligen kryptisch wie 790cd5a974bf570ff6a303c3dc5be90f ändern.

Auf diese Weise kann ein Hacker keine hack.php Datei hochladen und öffnen Sie es mit www.example.com/uploaded_files/hack.php, weil es z. 790cd5a974bf570ff6a303c3dc5be90f.php. Aus meiner Sicht ist es auf diese Weise absolut sicher. Habe ich Recht, dass es so sicher ist?

Ich denke nur eine selbst-ausführende Datei könnte ein Problem sein. Existieren selbst-ausführende Dateien überhaupt?

+0

Anwendung [Kerckhoff-Prinzip] (https://en.wikipedia.org/wiki/Kerckhoffs erhalten 's_principle) "der Angreifer weiß alles über das System außer dem (kryptografischen) Schlüssel "könnte Ihr Angreifer wissen, dass Sie eine MD5-Prüfsumme des Dateinamens verwenden und daher den hochgeladenen Dateinamen ableiten können. –

+0

Warum würden Sie unter keinen Umständen die Ausführung von hochgeladenen Dateien zulassen? – miken32

+0

@ miken32 Ich verstehe nicht, was du meinst. Natürlich möchte ich vermeiden, dass ein Hacker eine Datei hochladen und dann ausführen kann. Um dies zu vermeiden, ändere ich den echten Dateinamen in etwas kryptisch mit md5 (uniqid ($ filename)). Ich hoffe, dass ein Hacker die Datei nicht über den Browser aufrufen und ausführen kann, weil er den (tatsächlichen) Dateinamen nicht kennt. Dies würde natürlich nicht funktionieren, wenn es sich um eine Self-Execution-Datei handelt. Aber tu es. Selbstausführungsdateien existieren überhaupt? – David

Antwort

0

Sie sollten auch den MIME-Typ der hochgeladenen Datei und der Erweiterung überprüfen (obwohl das beim Hochladen leicht gefälscht werden kann). Wenn Sie nur Bilder erwarten, können Sie auch durch das Ausführen eines Skripts wie dies für die Bildbreite und -länge Parameter überprüfen können:

$size = getimagesize($target_file); 

Ist dies nicht die richtigen Werte zurückgibt, ist es kein Bilddatei.

Vielleicht möchten Sie sich auch über gefährliche Grafiken wie Gifar informieren.

+0

Okay, aber warum sollte ich zusätzliche Kontrollen machen? Der Benutzer kann die hochgeladene Datei nicht aufrufen/öffnen, oder wird er? – David

+0

Ich würde jeden Upload so gut wie möglich sanieren. Wenn Sie Bilddateien erwarten, würde ich nach Bilddateien suchen, zum Beispiel mit getimagesize. Es gibt viele Umstände, unter denen jemand die hochgeladene Datei tatsächlich erreichen kann. Eine Webserver-Aktualisierung/Fehlkonfiguration könnte beispielsweise das Durchsuchen von Verzeichnissen ermöglichen. Oder jemand könnte einfach einen Brute-Force-Angriff versuchen, um Dateien auf dem Server zu finden (vorausgesetzt, sie können aus dem Internet ausgeführt werden). – Cruiser

+0

Normalerweise möchten die Leute etwas mit den später hochgeladenen Dateien machen. Lade sie herunter, zeige sie irgendwo an.Selbst ein einfaches Optimierungsskript für Dateien oder einen Indexdienst kann die Dateien auslösen und ausführen, wenn die Umstände es erlauben. – Cruiser

0

Put hochgeladenen Dateien in dort eigenen Ordner wie /etc/web/uploads/<Random> (../uploads), während die Website root bei /etc/web/public/ ist oder wenn Sie .htaccess erstellen eine im Upload-Ordner verwenden können, und setzen Deny from all Auch uniqid und rand erzeugt keine kryptographisch sichere Werte würde ich auch prüfen, ob die hochgeladene Datei ein Bild file_get_contents sowieso Link to someones isimage functionhttp://php.net/manual/en/function.uniqid.phphttp://php.net/manual/en/function.rand.php

Nutzung ist die Benutzer Bild

Verwandte Themen