Lección 01
Archivos y rutas seguras
Lee sin alterar, valida destinos y escribe resultados de manera atómica.
Antes de practicar
01 // Modela rutas y autorización por separado
pathlib representa rutas como objetos y permite unir componentes sin concatenar separadores. Una ruta bien formada no está autorizada sólo por existir: define una raíz permitida y comprueba el destino efectivo antes de leer o escribir.
02 // Resuelve antes de comparar
Resolver elimina segmentos relativos y muestra a qué ubicación apunta la ruta. Los enlaces simbólicos también pueden cambiar el destino, así que decide si la herramienta los admite. Un prefijo textual no basta para demostrar que permanece dentro de la raíz.
Ejemplo: una entrada puede comenzar con el texto de la carpeta aprobada y, después de resolver segmentos o enlaces, terminar fuera. La comparación debe usar el destino efectivo.
03 // Publica reportes de una sola vez
Separa fuente, temporal y destino final. Escribe el contenido completo en un temporal controlado, valida su estructura y publica el reporte mediante un reemplazo atómico. Así otro proceso no abre como final un archivo a medio escribir.
La atomicidad no corrige un reporte inválido. Define permisos y qué ocurre si la validación falla, conservando la versión anterior hasta tener una salida aceptable.
04 // Declara cómo leer los bytes
La codificación determina cómo interpretar bytes como texto. Declárala al abrir el archivo y elige una política visible para bytes inválidos: informar, rechazar o sustituir dejando registro. Codificar representa datos; no los cifra.
Ejemplo: procesa un reporte ficticio dentro de una raíz aprobada, cuenta líneas válidas y rechazadas y conserva el original. Una extensión conocida no autoriza la ruta ni garantiza el formato del contenido.