alx: Verzeichnisangabe in String prüfen

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

  1. 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

    --
    Losung für Mittwoch, 9. Februar 2005
    Der Mensch, vom Weibe geboren, lebt kurze Zeit und ist voll Unruhe. (Hiob 14,1)
    Es ist noch eine Ruhe vorhanden für das Volk Gottes. (Hebräer 4,9)
    (Losungslink)
  2. 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

    --
    "Der überwiegende Teil unserer Importe kommt aus dem Ausland." (George W. Bush)
  3. 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.