Las rutas en Windows son relativamente complejas . En particular, Microsoft tiene el hábito de inventar nuevas características, por lo que incluso si su servidor HTTP está realmente protegido contra el paso de ruta today , puede volverse vulnerable en la próxima versión de Windows, posiblemente incluso en una pequeña actualización. / p>
En este momento, estás utilizando el "pensamiento de lista negra": estás intentando enumerar todas las construcciones "malas" y detectarlas específicamente. Se sabe que las listas negras son frágiles porque es muy difícil ser exhaustivas, y luego seguir siendo exhaustivas. Debería utilizar el pensamiento de lista blanca , es decir, definir una sintaxis para rutas permitidas y excluir todo lo demás.
Por ejemplo, defina que una ruta permitida consiste en una secuencia de componentes separados por caracteres de barra ("/", no "\"), con las siguientes reglas:
- Un componente contiene solo letras, dígitos, guiones ("-"), guiones bajos ("_") o puntos (".").
- Es posible que un punto no aparezca como primer o último carácter en un componente.
- No debe haber dos puntos consecutivos en un componente.
- Un componente contiene al menos un carácter y como máximo 64 caracteres (límite arbitrario).
- No pueden aparecer dos barras diagonales consecutivas en una ruta.
- Una ruta no comienza con una barra inclinada.
- Un camino no está vacío.
- La longitud total de una ruta no debe exceder los 250 caracteres.
Todas estas reglas son fáciles de aplicar mediante programación. Y garantizan una "ruta local limpia" que puedes enviar a fopen()
. Tenga en cuenta que la mayoría de las funciones de Windows están perfectamente satisfechas con la "/" como separador, pero es posible que desee reemplazar todas las barras diagonales con barras invertidas ( después verificando todas las reglas anteriores, por supuesto).