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
../something
mein 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.Antworten:
Seit cURL 7.42.0 ist dies mit möglich
--path-as-is
, wie in der Manpage beschrieben:quelle