为什么 FTPWebRequest 或 WebRequest 通常不接受 /../ 路径?
-
20-08-2019 - |
题
我正在尝试从 ftp Web 服务器自动执行一些上传/下载任务。当我通过客户端甚至通过 Firefox 连接到服务器时,为了访问我的目录,我必须指定如下路径:
ftp://ftpserver.com/../AB00000/incoming/files
如果我尝试访问此:
ftp://ftpserver.com/AB00000/incoming/files
服务器抛出目录不存在的错误。那么,问题是:
我试图使用第一个 ftp 地址创建 FTPWebRequest,但它总是解析出“/../”部分,然后我的服务器说该路径不存在。
我已经尝试过这些:
Uri target = new Uri("ftp://ftpserver.com/../AB00000/incoming/files");
FtpWebRequest request = (FtpWebRequest)WebReqeuest.Create(target);
和
string target = "ftp://ftpserver.com/../AB00000/incoming/files";
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(target);
在第一位中,当实例化 Uri 对象时,路径已经不正确,在第二位中,它位于 WebRequest.Create 方法之后。有什么想法吗?
编辑:
此外,自从我发布此内容以来,我尝试使用无解析选项创建 URI。我也尝试过这样的事情:
string ftpserver = "ftp://ftpserver.com/../";
string path = "12345/01/01/file.toupload";
Uri = new Uri(ftpserver, path, true);
它总是解析出根部分(“/../”)。
其他提示
不能确定它,但它可能是出于安全考虑,因为允许“/../”的URI将可能让人们在任何服务器的文件系统上的自由航行。
另外,官方 URI RFC 指出解决的一个URI之一,当执行的步骤,实际上是除去“/../”段的,所以它不是在C#库中的问题,但它是常规的URI行为。
您是否尝试过用@符号像这样?
Uri target = new Uri(@"ftp://ftpserver.com/../AB00000/incoming/files");
FtpWebRequest request = (FtpWebRequest)WebReqeuest.Create(target);
不隶属于 StackOverflow