我刚刚编写了一个非常基本的服务器,它为我调用的目录中的每个文件提供服务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
从 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
...