なぜ一般的にしたFtpWebRequest、またはWebRequestクラスは/../パスを受け入れていないのですか?

StackOverflow https://stackoverflow.com/questions/480619

  •  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オブジェクトがインスタンス化されるときに

最初のビットでは、パスは第2のビットに、既に間違っている、それはWebRequest.Createメソッドの後です。すべてのアイデアは、何が起こっているのか?

EDITます:

私はこの投稿以来、

また、私はノー解析オプションを使用してURIを作成しようとしています。

:私はまた、このような何かを試してみました
string ftpserver = "ftp://ftpserver.com/../";
string path = "12345/01/01/file.toupload";

Uri = new Uri(ftpserver, path, true);

そして、それは常にルート部分を解析し(「/../").

役に立ちましたか?

解決

のようなもので...をエスケープしてみ

Uri target = new Uri("ftp://ftpserver.com/%2E%2E/AB00000/incoming/files");

私はこの中に見つかったこのブログの<のhref =」に従って動作することhttp://social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/76d3a3a2-48b6-4753-988e-dfd845f582e9/」のrel = "noreferrer">ディスカッションするます。

他のヒント

それについては本当にわからないが、それは可能「/../」URIは潜在的に、人々がどのサーバのファイルシステム上で自由に移動できますから、セキュリティ上の理由かもしれません。

また、公式の URIのRFC のURIにの一つを解決するときと述べています実行されるステップは、実際に「/../」セグメントの除去であるので、それは、C#ライブラリに問題はないのですが、それは通常のURIの振る舞いです。

あなたはとてもように@記号を使用してみましたか?

Uri target = new Uri(@"ftp://ftpserver.com/../AB00000/incoming/files");
FtpWebRequest request = (FtpWebRequest)WebReqeuest.Create(target);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top