CAT.NET « Désinfectez le chemin du fichier avant de passer à déposer des routines du système » un message
-
22-09-2019 - |
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?
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é.