Por que não FtpWebRequest, ou WebRequest em geral aceitar um caminho /../?

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

  •  20-08-2019
  •  | 
  •  

Pergunta

Eu estou tentando automatizar algumas tarefas upload / download de um servidor web ftp. Quando eu conectar ao servidor através de cliente, ou através de Firefox mesmo, a fim de obter para o meu diretório, eu tenho que especificar um caminho como este:

ftp://ftpserver.com/../AB00000/incoming/files

Se eu tentar acessar este:

ftp://ftpserver.com/AB00000/incoming/files

O servidor gera um erro que o diretório não existe. Então, o problema:

Eu estou tentando criar um FtpWebRequest com o primeiro endereço ftp, mas sempre analisa o "/../" parte e depois o meu servidor diz que o caminho não existe.

Eu tentei estes:

    Uri target = new Uri("ftp://ftpserver.com/../AB00000/incoming/files");
FtpWebRequest request = (FtpWebRequest)WebReqeuest.Create(target);

e

string target = "ftp://ftpserver.com/../AB00000/incoming/files";
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(target);

No primeiro bit, o caminho já está incorreta quando o objeto Uri é instanciado, no segundo bit, é após o método WebRequest.Create. Alguma idéia o que está acontecendo?

EDIT:

Além disso, desde que eu postei isso, eu tentei criar a URI com a opção sem análise. Eu também tentei algo como isto:

string ftpserver = "ftp://ftpserver.com/../";
string path = "12345/01/01/file.toupload";

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

E sempre analisa a parte de raiz ( "/../").

Foi útil?

Solução

Tente fugir do .. com algo como:

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

Isso funciona de acordo com este blog que eu descobri nesse discussão .

Outras dicas

Não tenho certeza sobre isso, mas pode ser por razões de segurança, uma vez que permite "/../" URIs seria potencialmente deixar as pessoas navegar livremente no sistema de arquivos de qualquer servidor.

Além disso, o funcionário URI RFC estados que quando resolver um um URI do etapas realizadas na verdade é a remoção de "/../" segmentos, por isso não é um problema na biblioteca C #, mas é um comportamento normal URI.

Você já tentou usar o símbolo @ como assim?

Uri target = new Uri(@"ftp://ftpserver.com/../AB00000/incoming/files");
FtpWebRequest request = (FtpWebRequest)WebReqeuest.Create(target);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top