Я только что написал очень простой сервер, который обслуживает каждый файл в каталоге, который я называю public . Теперь этот сервер не имеет никаких функций безопасности (как я уже сказал, очень базовый), и поэтому я ожидаю, что следующая команда curl выдаст мне содержимое файла вне этого каталога:

curl 127.0.0.1:3000/../fileInTheParentDirectory.txt

Тем не менее, это не работает. Мониторинг трафика с помощью fiddler показал мне, почему: он фактически игнорирует .. и пытается получить доступ к 127.0.0.1/fileInTheParentDirectory.txt . Конечно, я не против иметь бесплатные функции безопасности, но я не понимаю, почему это происходит. Поэтому мой вопрос: автоматически ли удаляет curl ..?Если да, то с какой версии он это сделал?

Я нашел ресурсы, которые утверждают, что это должно работать, поэтому я предполагаю, что поведение изменилось или изменилось в разных ОС или что-то в этом роде.

Если уместно, вот мой вывод 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 

1 ответ1

0

Начиная с cURL 7.42.0 это возможно с --path-as-is , как описано на странице руководства:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .