Abrufen des übergeordneten Verzeichnisses mit curl

0

Ich habe gerade einen sehr einfachen Server geschrieben, der jede Datei in einem Verzeichnis bedient, das ich anrufe public. Jetzt hat dieser Server keinerlei Sicherheitsfunktionen (wie gesagt, sehr einfach), und daher würde ich erwarten, dass der folgende Befehl curl mir den Inhalt einer Datei außerhalb dieses Verzeichnisses gibt:

curl 127.0.0.1:3000/../fileInTheParentDirectory.txt

Dies funktioniert jedoch nicht. Die Überwachung des Datenverkehrs mit Fiddler hat mir gezeigt, warum: Es ignoriert das ..und versucht, darauf zuzugreifen 127.0.0.1/fileInTheParentDirectory.txt. Es macht mir sicherlich nichts aus, kostenlose Sicherheitsfunktionen zu haben, aber ich verstehe nicht, warum dies geschieht. Meine Frage ist also: Entfernt Curl das automatisch ..? Wenn ja, seit welcher Version hat es das getan?

Ich habe Ressourcen gefunden, die behaupten, dass dies funktionieren sollte, also vermute ich, dass das Verhalten geändert wurde oder dass es sich bei verschiedenen Betriebssystemen oder Ähnlichem unterscheidet.

Falls relevant, hier ist meine Ausgabe von curl --version:

curl 7.50.3 (x86_64-apple-darwin14.5.0) libcurl/7.50.3 OpenSSL/1.0.2j zlib/1.2.8
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 
Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets 
blalasaadri
quelle
Hier tun wget, curl und Firefox dasselbe ... welche Ressourcen behaupten, dass es funktionieren sollte?
Golimar
Ich lese das Buch "Beginning Node.js" von Basarat Ali Syed (Apress) und das hat ein Beispiel, das - in dem Buch - genau das tut, was ich erwarten würde. Und ich habe es auch woanders gesehen, als ich nach einer Lösung gesucht habe, obwohl ich nicht finde, wo genau das war.
Blalasaadri
Und ja, Firefox hat das auch für mich getan.
blalasaadri
Macht sowieso Sinn, ich kann nicht erkennen,
warum es
Der Punkt, den ich hier sehe, ist Penetrationstests. Ich möchte sicherstellen, dass wenn ich einen echten Server erstelle und jemand ein Tool hat, auf das zugegriffen werden kann, ../somethingmein Server einen Fehler und nicht die angeforderte Datei zurückgibt. Soweit mir bekannt ist, enthält die HTTP-Spezifikation (oder eine andere relevante Spezifikation) nichts, was ein Tool daran hindern würde, dies zu tun.
Blalasaadri

Antworten:

0

Seit cURL 7.42.0 ist dies mit möglich --path-as-is, wie in der Manpage beschrieben:

$ curl -v --path-as-is  localhost/../../foo.txt
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET /../../foo.txt HTTP/1.1
...
Cweiske
quelle