php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
Alt 26.08.2008, 21:35  
Erfahrener Benutzer
 
Registriert seit: 21.07.2003
Beiträge: 340
PHP-Kenntnisse:
Fortgeschritten
Simbo
Standard [Erledigt] String mit Pfadangabe darf nicht in bestimmte Verzeichnisse führen

Hallo zusammen,

also mein PHP Script bekommt per GET einen Pfad übermittelt, der vom User selbstverständlich beeinflussbar ist.
Nun möchte ich verhindern, dass der Pfad in bestimmte Verzeichnisse führt.
Ein Beispiel...

Folgende Verzeichnisse existieren:
domain.de/files/
domain.de/files/secure/
domain.de/files/secure/sub/
domain.de/files/foo/
domain.de/files/bar/
domain.de/private/

Der Pfad darf nun in /files/ und alle Unterverzeichnisse von /files/ führen, aber nicht in /files/secure/ und Unterverzeichnisse von /files/secure/.
Ausserdem darf der Pfad nicht auf / oder /private/ oder übergeordnete Verzeichnisse auf dem Webserver führen.

Es gilt also beispielsweise folgende Pfade herauszufiltern und die Weiterverarbeitung zu verhindern:
/files/../
/files/../private/
/files/foo/../../secure/sub/
/files/../../../somewhere/

Gleichzeitig sollen aber Pfade wie /files/foo/../bar/ erlaubt sein.

Wie mach ich das am besten?

Gruß

Simon

Geändert von Simbo (26.08.2008 um 21:42 Uhr).
Simbo ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 26.08.2008, 22:46  
Moderator
 
Registriert seit: 06.06.2008
Beiträge: 4.945
PHP-Kenntnisse:
Fortgeschritten
Wolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer Anblick
Wolla eine Nachricht über ICQ schicken
Standard

Du nimmst den Pfad auseinander, schaust die einzelnen Bestandteile an, und weist dann das ab, was nicht erlaubt sein soll.

Oder du verwaltest eine Liste aller erlaubter Ordner in einem Array und prüfst den gefundnen Pfad auf Existenz in diesem Array.
Wolla ist offline  
Alt 26.08.2008, 23:04  
Erfahrener Benutzer
 
Registriert seit: 21.07.2003
Beiträge: 340
PHP-Kenntnisse:
Fortgeschritten
Simbo
Standard

Zitat:
Zitat von Wolla Beitrag anzeigen
Du nimmst den Pfad auseinander, schaust die einzelnen Bestandteile an, und weist dann das ab, was nicht erlaubt sein soll.
Genau da liegt mein Problem...
Sobald ein Pfad ".." enthält, gibt es einfach unendlich viele Kombinationen.

Zitat:
Zitat von Wolla Beitrag anzeigen
Oder du verwaltest eine Liste aller erlaubter Ordner in einem Array und prüfst den gefundnen Pfad auf Existenz in diesem Array.
Das wiederum geht auch nicht.
Sowohl die erlaubten als auch die nicht erlaubten Ordner verändern sich ständig in Anzahl und Bezeichnung.

Das einzige was sich nicht verändert, ist das Stammverzeichnis erlaubter Ordner (im Beispiel /files/) und der Name des Verzeichnisses, das inkl. Unterverzeichnisse ausgeschlossen werden soll (/files/secure/). Die Unterverzeichnisse innerhalb von /files/secure/ können sich ebenfalls verändern.

Klar, kann ich den String prüfen, ob er einen nicht erlaubten Verzeichnisnahmen enthält.
Das heisst aber noch lange nicht, dass er auch in einem nicht erlaubten Verzeichnis landet.

/files/../files/secure/sub/../../foo/ wäre zum Beispiel eine Kombination, die am Ende in einem freigegebenen Ordner landet.

Die Lösung ist bestimmt nicht kompliziert, aber irgendwie brauch ich nen Denkanstoß...
Simbo ist offline  
Alt 26.08.2008, 23:23  
Erfahrener Benutzer
 
Benutzerbild von drsoong
 
Registriert seit: 05.08.2008
Beiträge: 1.127
drsoong wird schon bald berühmt werden
Standard Andere Verzeichnisstruktur

Sieht so aus, als müßtest Du Deine Verzeichnis so umstricken, dass eindeutig ausgehend von einem erlaubtem Stammverzeichnis überall gespeichert werden darf und die unerlaubten Verzeichnisse halt ein anderes Stammverzeichnis haben. Dürfte allerdings 'ne Menge Arbeit sein, wenn Deine Anwendung in evtl. jeder Seite relative Pfade benutzt.

Vielleicht kann man aber auch bei allen unerlaubten Ordnern erst mal die Schreibrechte entziehen und dann - habe ich selbst noch nie gemacht - an Hand der Eigenschaft "ist schreibgeschützt" entscheiden, was man dem User bietet. Habe allerdings keine Ahnung wie man das ausliest.
drsoong ist offline  
Alt 27.08.2008, 09:46  
Erfahrener Benutzer
 
Registriert seit: 20.08.2008
Beiträge: 119
sharp befindet sich auf einem aufstrebenden Ast
Standard

Du könntest auch in die Verbotenen Ordner einfach eine index.php packen die per header() den User rauswrifst sobald er das Verzeichnis aufruft und wider bei der Ausgangsseite landet
sharp ist offline  
Alt 27.08.2008, 10:40  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Schau doch mal realpath() an, das expandiert dir die '..' und gibt dir einen absoluten Pfad zurück. Der Rest ist dann ein Kinderspiel.
__________________
Gruss
L
lazydog ist offline  
Alt 27.08.2008, 18:45  
Erfahrener Benutzer
 
Registriert seit: 21.07.2003
Beiträge: 340
PHP-Kenntnisse:
Fortgeschritten
Simbo
Standard

Danke!

realpath() ist genau das, was ich gesucht hab...
(Dass sich dieses Problem mit einem kleinen Hinweis auf eine Seite im Manual gelöst hat, ist ja schon fast peinlich...)


Geändert von Simbo (28.08.2008 um 02:28 Uhr).
Simbo ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Event abfangen Ambience JavaScript, Ajax und mehr 4 30.08.2007 14:36
String auf bestimmte Breite (Pixel) kuerzen... mudo PHP-Fortgeschrittene 25 28.01.2005 19:07
String darf nur bestimmte Zeichen enthalten PHP Tipps 2004 5 05.09.2004 23:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
diese angabe bestimmt, php übergeordnetes verzeichnis, php führe verzeichnisse auf, verhindern dass man pfad domain, php pfad übergeordnet, nicht erlaubter pfad ?, php .. als pfad verhindern, pfadangabe in array, php pfadangabe verhindern, pfadangabe in ein array, relative pfade php übergeordnetes verzeichnis, php \darf nicht\ im string enthalten sein, asp 0131 darf kein \..\ zur angabe des übergeordneten verzeichnisses enthalten., übergeordnetes verzeichnis php relative pfade, php string pfad, javascript pfadangabe, zu lange pfade server 2008 verhindern, php erlaubter pfad, javascript pfadangabe übergeordneter, php relative pfadangabe im string

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:54 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum