Tengo una aplicación web node.js en la que necesito concatenar dos rutas de forma segura. La primera (la más a la izquierda) es una constante, y la segunda (la más a la derecha) es relativa a la primera y proviene de una entrada de usuario no confiable. La ruta resultante debe ser algo que está debajo de la primera ruta. Así que la situación es esta:
path1 = "public/html"; // Hardcoded path.
path2 = req.query.path; // Untrusted user input.
result = safePathJoin(path1, path2); // Result can be e.g. public/html/index.htm,
// but never private/config.xml
Lo que necesito es la función safePathJoin()
que es segura contra ataques transversales de directorios. Mi primer enfoque ingenuo es el siguiente:
safePathJoin = function(path1, path2) {
path1 = path.normalize(path1);
var result = path.join(path1, path2);
return result.startsWith(path1) ? result : undefined;
}
¿Esto es lo suficientemente bueno? ¿Hay una manera estándar de hacer esto? ¿Alguna sugerencia?