Bereinigen Sie die Datei Pfad in PHP
Grüße,
Ich bin der Hoffnung, dass meine kleinen Programm sicher, so dass potentiell böswillige Benutzer können vertrauliche Dateien auf dem server.
$path = "/home/gsmcms/public_html/central/app/webroot/{$_GET['file']}";
if(file_exists($path)) {
echo file_get_contents($path);
} else {
header('HTTP/1.1 404 Not Found');
}
Aus der Spitze von meinem Kopf ich weiß, dass Eingaben wie '../../../../../../etc/passwd' würde ärger geben, aber Frage mich, was andere malcious Eingänge sollte ich erwarten und wie Sie Sie vermeiden.
InformationsquelleAutor der Frage SeanDowney | 2009-12-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
realpath() lassen Sie konvertieren Sie einen beliebigen Pfad enthalten können, die entsprechenden Angaben in einen absoluten Pfad...Sie können dann dafür sorgen, dass der Pfad unter einem bestimmten Unterverzeichnis, das Sie zulassen möchten, dass downloads aus.
InformationsquelleAutor der Antwort Bert Lamb
Verwenden der Basisnameanstatt zu versuchen, zu antizipieren, alle unsicheren Pfade, die ein Benutzer möglicherweise stellen.
InformationsquelleAutor der Antwort philfreo
Lösung von der OP:
InformationsquelleAutor der Antwort Yauhen Yakimovich
Wenn Sie können, verwenden Sie einen whitelist wie ein array der erlaubten Dateien und überprüfen Sie die Eingabe vor: wenn das mit der bat Datei von der Benutzer nicht anwesend in dieser Liste, die Anfrage abzulehnen.
InformationsquelleAutor der Antwort Matteo Riva
Es ist eine zusätzliche und wichtige Sicherheits -, Risiko hier. Dieses Skript füllt die Quelle einer Datei in den output-stream ohne irgendeine server-seitige Verarbeitung. Dies bedeutet, dass alle Ihre source-code von allen zugänglichen Dateien werden durchgesickert auf das internet.
InformationsquelleAutor der Antwort Cheekysoft
Selbst wenn Sie mit realpath, sollten Sie noch immer Streifen alle ".." bevor Sie es verwenden. Andernfalls kann ein Angreifer Lesen Sie Ihre Server gesamte Verzeichnis-Struktur mit brute-force, wie z.B. "valid_folder/../../test_if_this_folder_name_exists/valid_folder" - wenn die Anwendung akzeptiert diesen Weg, der Angreifer weiß, dass der Ordner vorhanden ist.
InformationsquelleAutor der Antwort Toxiro
Streifen alle
/. /..
oder \. \.. und konvertieren, um alle Schrägstrich, da die verschiedenen Umgebungen akzeptieren Schrägstrich. Dies sollte eine ziemlich sichere filter für Pfad-Eingabe. In Ihrem code, den Sie sollten vergleichen mit übergeordneten Verzeichnissen, die Sie nicht wollen, Zugang nur für den Fall.InformationsquelleAutor der Antwort snoop_dog