🔒 Registro cerrado · Apertura oficial próximamente · Acceso exclusivo para alumnos activos
Iniciar SesiónNormalizar la ruta y confinarla al directorio permitido
5 tareas · 40 min · Principiante
Tres equipos de Editorial Quinchama escribieron su propia versión del control que debía cerrar el hallazgo de las descargas, y la editorial quiere elegir una antes de desplegar. Tienes el árbol del almacén, las tres implementaciones en tres lenguajes y el informe con el que calidad las probó: cinco casos y la decisión de cada una. Leer bien este informe es la mitad del oficio.
Objetivo de la sala
Tres equipos de Editorial Quinchama escribieron su propia versión del control que debía cerrar el hallazgo de las descargas, y la editorial quiere elegir una antes de desplegar. Tienes el árbol del almacén, las tres implementaciones en tres lenguajes y el informe con el que calidad las probó: cinco casos y la decisión de cada una. Leer bien este informe es la mitad del oficio.Un control de confinamiento tiene dos mitades y las dos importan. La primera es resolver: convertir lo que llegó en la ruta real del archivo, con los ascensos de directorio ya aplicados y los enlaces simbólicos ya seguidos. La segunda es comparar: comprobar que esa ruta real está dentro del directorio permitido.
Las bibliotecas estándar traen piezas para las dos mitades, y conviene saber cuál hace qué. En PHP, realpath() devuelve la ruta canónica con los enlaces simbólicos resueltos, o false si el archivo no existe. En Python, os.path.realpath() canoniza y sigue enlaces, y os.path.commonpath() compara rutas por sus componentes; su pariente os.path.commonprefix() compara caracteres y la documentación avisa de que no sirve para esto. En Java, normalize() quita los puntos y los pares de nombre y ascenso pero no toca los enlaces —para eso está toRealPath()—, y startsWith() compara elementos de ruta: la documentación lo dice con un ejemplo, foo/bar empieza por foo, pero no por f ni por fo.
El fallo frecuente no está en resolver: está en comparar. Comparar dos rutas como si fueran dos cadenas de texto convierte a cualquier carpeta cuyo nombre empiece igual en una carpeta permitida.
Responde para continuar
El directorio permitido es una carpeta llamada «documentos» y la ruta resuelta cae en otra llamada «documentos-internos», hermana suya. ¿Por qué una comparación de prefijo de texto la deja pasar?
Ver pista de ayuda
Escribe los dos nombres uno debajo del otro y tápalos a partir de la última letra del permitido.
Abre el laboratorio, mira arbol-almacen.txt para saber qué hay alrededor del directorio permitido y luego lee el caso C2 de informe-confinamiento.txt. La columna de la ruta resuelta dice exactamente dónde acabó.
Responde para continuar
¿En qué carpeta del almacén acabó el caso C2? Escribe solo el nombre de la carpeta, tal como aparece en el árbol.
Ver pista de ayuda
Está al mismo nivel que la carpeta permitida y guarda regalías y contratos.
De los cinco casos del informe, tres terminan fuera del directorio permitido y dos dentro. Lee el código de las tres implementaciones y crúzalo con las tres últimas columnas: una sola rechaza los tres que salen y acepta los dos que no.
Fíjate también en por qué fallan las otras dos: una compara texto en lugar de componentes de ruta; la otra confía en un filtro de ascensos y no ve que, al unir un directorio con un nombre que ya es absoluto, la biblioteca descarta el directorio —está documentado así, no es un error de la biblioteca—.
Responde para continuar
¿Qué archivo de los tres propuestos rechaza los tres casos que salen del directorio permitido? Escribe su nombre tal como aparece en la carpeta.
Ver pista de ayuda
Es el único que, además de normalizar, resuelve enlaces y compara elementos de ruta.
El caso C5 no trae ningún ascenso de directorio: el nombre apunta a un archivo que está, de verdad, dentro de la carpeta permitida. Lo que pasa es que ese archivo es un enlace simbólico creado por error en una migración y apunta a la configuración del portal.
Responde para continuar
¿Qué enseña el caso C5 sobre un control que normaliza la ruta pero no resuelve enlaces simbólicos?
Ver pista de ayuda
Compara la ruta que se compara con el archivo que se abre.
Elegir una implementación no cierra el trabajo. El control vive en un sitio y hay que asegurarse de que todas las descargas pasan por él, y de que el enlace simbólico que quedó en la carpeta se retira.
Responde para continuar
¿Qué recomendación acompaña mejor a la elección de la implementación correcta?
Ver pista de ayuda
Un control repetido en diez sitios se olvida en el once.
Whoami-Labs Pro
Whoami-Labs Pro utiliza cookies
Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad
Preferencias
Configuraciones de cookies
Elige qué categorías permitir. Las esenciales siempre están activas. Consulta la Política de Privacidad.
Esenciales
Siempre activas · sesión, CSRF, tema y esta preferencia
Necesarias para iniciar sesión, proteger formularios (CSRF) y recordar tu elección de cookies y tema. Sin ellas la plataforma no funciona de forma segura.
Analíticos
Hoy no activos en la plataforma; listos para cuando se conecten
Nos ayudan a entender uso de cursos y páginas. Si los activas, se usarán cuando conectemos analítica; hasta entonces no se carga ningún tracker.
Marketing
Hoy no activos; campañas futuras solo con tu permiso
Comunicaciones o campañas. No activos hoy en la plataforma; quedarán listos si los conectamos y solo si los permites.