Question

J'analyse mon code (C #, application de bureau) avec le code CAT.NET Analyse et obtenir « Désinfectez le chemin du fichier avant de passer à déposer des routines du système » lorsque le traitement avec des noms de fichiers. Ce que je ne comprends pas que, pour assurer le nom de fichier est valide, j'utilise:

void SomeMethod(String filename)
{
    filename = System.IO.Path.GetFullPath(filename);
    // ... Do stuff
}

est-il pas une « solution magique » pour résoudre les problèmes avec les noms de fichiers non valides? J'ai lu quelque chose de semblable ici (première réponse), mais dans mon cas, je suis sur le seul des fichiers locaux, bien, quelque chose de très basique, donc ...

Alors, pourquoi je reçois ce message et comment faire pour éviter cela?

Était-ce utile?

La solution

Je sais que c'est une vieille question, mais je viens tout juste sur quelque chose qui peut être utile spécifiquement lié au message d'erreur CAT.Net.

Dans un blog sur les règles de flux de données CAT.NET, ils ont ceci à dire au sujet du FileCanonicalizationRule:

Description

  

Saisie utilisateur utilisé dans les routines de manipulation de fichiers peut potentiellement conduire à   Fichier vulnérabilité Canonicalisation. Code est particulièrement sensible   à Canonicalisation questions si elle rend des décisions en fonction du nom   d'une ressource qui est transmis au programme en entrée. Fichiers, chemins,   et les URL sont des types de ressources qui sont vulnérables à canonicalisation   parce qu'il ya beaucoup de différentes façons de représenter dans chaque cas   même nom.

Résolution

  

Désinfectez le chemin du fichier avant de passer à déposer des routines de manipulation.   Utilisez Path.GetInvalidFileNameChars ou pour obtenir Path.GetInvalidPathChars   les caractères non valides et les supprimer de l'entrée. Plus   informations peuvent être trouvées à    http://msdn.microsoft.com/en- nous / bibliothèque / system.io.path.getinvalidfilenamechars.aspx .

Alors, ils suggèrent que vous utilisez Path.GetInvalidFileNameChars et Path.GetInvalidPathChars pour valider votre chemins.

Notez que leur suggestion est de supprimer les caractères non valides. Bien que ce sera en effet rendre le chemin valide, il peut provoquer un comportement inattendu pour l'utilisateur. Comme les commentaires sur cette question / réponse suggère qu'il est probablement préférable de quitter tôt et indiquer à l'utilisateur que leur chemin est invalide, plutôt que de faire quelque chose d'inattendu avec leur entrée (comme la suppression des caractères incorrects et en utilisant la version modifiée).

Autres conseils

Si le nom provient d'un utilisateur, il pourrait être quelque chose comme « ../../../../etc/passwd » - le message d'erreur vous dit que vous devez le désinfecter afin qu'il puisse « t arriver à des répertoires, il est pas censé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top