Verzeichnisangabe in String prüfen
alx
- perl
0 Götz0 Patrick Canterino0 alx
Hallo,
ich habe ein cgi-script, welches mir ein Verzeichnislisting erstellt.
Die Angabe, welcher Verzeichnisinhalt in einem "basisverzeichnis" angezeigt werden soll wird mittels Parameter übergeben.
Also z.B. so: listing.cgi?dir=/das/soll/angezeigt/werden
Dabei würde das Verzeichnis "/das/soll/angezeigt/werden" aus dem Basisdir angezeigt.
Wie kann ich nun verhindern, das ein User den Parameter per Hand ändert und z.B. "/.." hinzufügt und aus dem Basisdir "rausrutscht"?
Der String müsste als diesbezüglich validiert werden. Hab da auch schon mit div. Regexp rumprobiert aber nichts wirklich geeignetes gefunden.
Wie kann ich dann noch aus dem validierten String die Verzeichnisangabe herrausbekommen ohne die letzte Angabe. Also quasi das Parentdir?
Danke
alx
Hallo alx!
Also z.B. so: listing.cgi?dir=/das/soll/angezeigt/werden
Hab da auch schon mit div. Regexp rumprobiert aber nichts wirklich geeignetes gefunden.
Naja, da mußt Du halt nach einem geeigneten suchen.
(String darf nicht mit ../ anfangen oder sowas ...)
Wie kann ich dann noch aus dem validierten String die Verzeichnisangabe herrausbekommen ohne die letzte Angabe. Also quasi das Parentdir?
Hier habe ich leider nicht genau verstanden, welchen Teil des Pfades Du eigentlich haben willst (in /bla/blub/muh willst Du blub?).
Aber auch das sollte sih mit einem RegEx lösen lassen.
MfG
Götz
Hallo alx,
ich habe ein cgi-script, welches mir ein Verzeichnislisting erstellt.
Die Angabe, welcher Verzeichnisinhalt in einem "basisverzeichnis" angezeigt werden soll wird mittels Parameter übergeben.
Also z.B. so: listing.cgi?dir=/das/soll/angezeigt/werden
Dabei würde das Verzeichnis "/das/soll/angezeigt/werden" aus dem Basisdir angezeigt.
Wie kann ich nun verhindern, das ein User den Parameter per Hand ändert und z.B. "/.." hinzufügt und aus dem Basisdir "rausrutscht"?
Wenn ich dich richtig verstanden habe, dürfte die Routine check_path() aus diesem von mir geschriebenen Modul für dich interessant sein:
http://cvs.sourceforge.net/viewcvs.py/devedit/devedit/modules/Tool.pm?view=markup
Sie müsste auch dein zweites Problem lösen können.
Beachte aber beim evtl. Kopieren, dass check_path() auch die Routinen upper_path() und file_name() aus diesem Modul benötigt.
Viele Grüße
Patrick Canterino
Danke für die Infos.
Hatte inzwischen auch selbst was gefunden.
mit File::Spec->canonpath(); kann man ja eine Pfadangabe validieren.
An das Parentdir kommt man da auch recht leicht ran:
File::Spec->canonpath("$dir/..");
Dann muss halt nur noch geprüft werden, ob der validierte Pfad sich auch in dem Basispfad befindet oder nicht.
Aber das ist ja recht simpel festzustellen und funktioniert auch.