Como o cURL 7.42.0 é possível com --path-as-is
, conforme descrito na página man:
$ 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
...
Acabei de escrever um servidor muito básico que serve todos os arquivos em um diretório chamado public
. Agora, este servidor não tem nenhum tipo de recurso de segurança (como eu disse, muito básico) e então eu esperaria que o seguinte comando curl me desse o conteúdo de um arquivo fora desse diretório:
curl 127.0.0.1:3000/../fileInTheParentDirectory.txt
No entanto, isso não funciona. Monitorar o tráfego com o violinista mostrou o motivo: ele está realmente ignorando o ..
e tentando acessar 127.0.0.1/fileInTheParentDirectory.txt
. Agora, certamente não me importo de ter recursos de segurança gratuitos, mas não entendo por que isso está acontecendo. Então, minha pergunta é: O curl remove automaticamente o ..
? Se sim, desde que versão fez isso?
Encontrei recursos que afirmam que isso deve funcionar, então estou achando que o comportamento foi alterado ou diferente com sistemas operacionais diferentes ou algo assim.
Se for relevante, aqui está minha saída de 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
Como o cURL 7.42.0 é possível com --path-as-is
, conforme descrito na página man:
$ 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
...
Tags curl