Tach!
Eigentlich sollte das in der Form nur ein Browser können,..
Ich habe das jetzt mehrfach auf diversen Homepages ausprobiert, z.B.
http://www.ghisler.ch/board/././../board/./viewforum.php?f=2
da wird einwandfrei folgende Resource aufgerufen
http://www.ghisler.ch/board/viewforum.php?f=2
Und wer macht diese Auflösung? Der Browser vor dem Request? Vermutlich, denn eine vollständige URL zu requesten ist nur bei Benutzung eines Proxys üblich. Ansonsten sieht der Request ja (abgekürzt) so aus:
GET /irgendwas HTTP/1.1
Host: example.com
Der Teil nach dem GET fängt immer mit / an, denn relative Angaben kann ein Server nicht auflösen. er wüsste nicht von wo aus er starten soll. Deswegen war dein Beispiel "../123/./.././456/index.cgi?890" nichts für den Webserver, sondern muss erst noch vom Browser in die absolute Form gebracht werden.
Schau nach, was der Browser wirklich sendet. Jeder moderne bringt dazu Debug-Möglichkeiten mit. Außerdem mag ich immer noch die livehttpheaders-Extension für den Firefox.
Martin schrieb folgendes:
Auch http://example.com/de/title/anything/p sieht für den oberflächlichen Betrachter aus, als würde man eine Ressource "p" abrufen, die im Verzeichnis /de/title/anything liegt. Das ist aber reine Mutmaßung, es könnte ebensogut ein Script /de sein, das den restlichen URL-Schwanz /title/anything/p selbst auswertet. Was ich sagen will: Es ergibt keinen wirklichen Sinn, diesen Teil weiter aufzudröseln, weil man sich damit in das Reich von Mutmaßungen begibt, aber keinen Nutzen daraus zieht.
Wenn dies stimmt und ich es richtig verstanden habe, ist es sogar notwendig, die Strings einfach hintereinander zu kopiern, da der Server ja selbst entscheidet welche Resource er bei welchem Aufruf zuteilt.
Nö, so einfach geht das nicht. Wenn die aktuelle Ressource die URL http://example.com/foo/bar hat und der Link "../qux" lautet, ergibt das Zusammenkopieren http://example.com/foo/bar../qux, was ja schon augenscheinlich nicht stimmt. Richtig wäre http://example.com/foo/qux
dedlfix.