Pourquoi FTPWebRequest ou WebRequest n'accepte-t-il généralement pas un chemin /../?

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

  •  20-08-2019
  •  | 
  •  

Question

J'essaie d'automatiser certaines tâches de téléchargement à partir d'un serveur Web FTP. Lorsque je me connecte au serveur par le biais du client, voire de Firefox, pour accéder à mon répertoire, je dois spécifier un chemin tel que celui-ci:

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

Si j'essaie d'y accéder:

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

Le serveur génère une erreur indiquant que le répertoire n'existe pas. Donc, le problème:

J'essaie de créer un FTPWebRequest avec la première adresse FTP, mais il analyse toujours le " /../ " partie et puis mon serveur dit que le chemin n'existe pas.

J'ai essayé ces:

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

et

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

Dans le premier bit, le chemin est déjà incorrect lorsque l'objet Uri est instancié, dans le second bit, c'est après la méthode WebRequest.Create. Des idées sur ce qui se passe?

EDIT:

De plus, depuis que j'ai posté ceci, j'ai essayé de créer l'URI avec l'option no parse. J'ai aussi essayé quelque chose comme ça:

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

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

Et il analyse toujours la partie racine (" /../ ").

Était-ce utile?

La solution

Essayez d’échapper à la .. avec quelque chose comme:

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

Cela fonctionne selon le blog que j'ai trouvé dans ce discussion .

Autres conseils

Pas vraiment sûr, mais c'est peut-être pour des raisons de sécurité, car autoriser " /../ " Les URI laisseraient potentiellement les gens naviguer librement sur le système de fichiers de n’importe quel serveur.

De même, le RFC URI officiel indique que, lors de la résolution d'un URI, l'un des Les étapes effectuées consistent en réalité à supprimer " /../ " segments, donc ce n'est pas un problème dans la bibliothèque C #, mais c'est le comportement habituel URI.

Avez-vous essayé d'utiliser le symbole @ comme ça?

Uri target = new Uri(@"ftp://ftpserver.com/../AB00000/incoming/files");
FtpWebRequest request = (FtpWebRequest)WebReqeuest.Create(target);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top