CAT.NET “Higiénico la ruta del archivo antes de pasar a las rutinas del sistema de archivos” mensaje
-
22-09-2019 - |
Pregunta
estoy analizando mi código (C #, aplicación de escritorio) con análisis de código CAT.NET y conseguir "Higiénico la ruta del archivo antes de pasar a las rutinas del sistema de archivos" mensaje cuando se trata de nombres de archivo. Lo que no entiendo es que para asegurar el nombre del archivo es válido, yo uso:
void SomeMethod(String filename)
{
filename = System.IO.Path.GetFullPath(filename);
// ... Do stuff
}
No es una "solución mágica" para resolver los problemas con los nombres de archivo no válidos? He leído algo similar aquí (primera respuesta), pero en mi caso estoy tratando sólo con archivos locales, bueno, algo muy básico, así que ...
Así que por qué estoy recibiendo este mensaje y cómo hacer para evitar que llegue?
Solución
Sé que esto es una vieja pregunta, pero yo he encontrado algo que puede ser útil específicamente relacionado con el mensaje de error CAT.Net.
En un entrada de blog sobre las Reglas de flujo de datos CAT.NET, tienen que decir acerca de la FileCanonicalizationRule
:
Descripción
La entrada del usuario utilizado en el archivo de rutinas de tratamiento pueden conducir potencialmente a Presentar la vulnerabilidad canónicos. Código es particularmente susceptible a problemas de canonización si hace que cualquier decisión basada en el nombre de un recurso que se pasa al programa como entrada. Archivos, caminos, y URLs son los tipos de recursos que son vulnerables a la canonización porque en cada caso hay muchas maneras diferentes para representar a la mismo nombre.
Resolución
Desinfecte la ruta del archivo antes de pasar a presentar las rutinas de manipulación. Uso Path.GetInvalidFileNameChars o Path.GetInvalidPathChars para obtener los caracteres no válidos y eliminarlos de la entrada. Más la información se puede encontrar en http://msdn.microsoft.com/en- es / library / system.io.path.getinvalidfilenamechars.aspx .
Por lo tanto, sugieren que utilice Path.GetInvalidFileNameChars
y Path.GetInvalidPathChars
validar su caminos.
Tenga en cuenta que su sugerencia es Eliminar los caracteres no válidos. Si bien este hecho hará la ruta válida, puede provocar un comportamiento inesperado para el usuario. A medida que los comentarios sobre este pregunta / respuesta sugiere que probablemente es mejor dejar de fumar temprano y avisar al usuario de que su camino no es válido, en lugar que hacer algo inesperado con su entrada (como la eliminación de su mala disposición y el uso de la versión modificada).
Otros consejos
Si el nombre proviene de un usuario, que podría ser algo así como "../../../../etc/passwd" - el mensaje de error que le está diciendo que es necesario desinfectar de modo que pueda 't get a los directorios que no se supone a.