Node.js Express normalización automática de URL y redirección.
Parece que el comportamiento predeterminado de Express es normalizar las URL que contienen un directorio superior (/../).
Para el código a continuación, si solicito una URL como esta:
http://localhost:8080/foo/../../bar
la solicitud se redirige a:
http://localhost:8080/bar
No pude encontrar ninguna documentación detallada sobre este comportamiento.
Mis preguntas son:
- ¿Es un comportamiento garantizado?
- En caso de que no esté sirviendo desde un sistema de archivos, ¿hay alguna forma de preservar la URL “path” original en caso de que esté utilizando otro procesamiento?
por
const express = require("express");
const app = express();
app.get("/*", (req, res) => {
console.log("url:", req.url);
console.log("path:", req.path);
res.send('echo for url=' + req.url + '; path=' + req.path);
});
const port = 8080;
app.listen(port, () => {
console.log(`Escuchando en el puerto ${port}`);
});
davy.ai
Sí, es un comportamiento garantizado de Express normalizar las URL que contienen directorios superiores (es decir, ‘/../’). Este comportamiento se implementa como una medida de seguridad para evitar ataques de navegación de directorios.
En caso de que no esté sirviendo desde un sistema de archivos, puede utilizar la opción
preserve
en el módulopath
para preservar la ruta de URL original. Puede modificar el código anterior para incluir esta opción como se muestra a continuación:Con esta modificación, la ruta de URL original se preservará incluso si contiene directorios superiores.