VERSIÓN UV DEL MODPAPI
En la Universitat de Valencia se han aplicado unos parches a la Versión 0-2 del modpapi.
Parches aplicados
Los parches aplicados en la UV son:
- 0.0.2-2 / 22 Marzo 2011
- No es necesario ya que exista el fichero referido en "PAPIAuthLocation"
- Todo acceso a "PAPIAuthLocation" devuelve un contenido vacío (0 bytes). El Apache no envía ya el contenido (mensaje de error, contenido del fichero, etc.), lo cual producía problemas con los navegadores.
- El envío de los ficheros PAPIAcceptFile y PAPIRejectFile no utiliza una "subrequest", lo que permite que ya no sea necesario que estén dentro del árbol de documentos accesibles.
- Si se define el atributo "PAPIauth", su valor se pone como contraseña en una cabecera "Authorization". Esto permite pasar contraseñas desde el AS a aplicaciones que utilizen autorización Básica y dicha cabecera para recuperar la contraseña (p.e., webmail que tiene que acceder luego a servidor IMAP).
- El cookie "Lcook" tiene ahora el atributo "HttpOnly", para disminuir los riesgos de que sea leído por páginas HTML residentes en el servidor (XSS).
- Al enviar la imagen de OK, que pone el Lcook, se añade una cabecera "P3P" de "Policies" para el IE8 y similares que, de otra manera no dejan poner cookies de terceros.
- Aumentada la resolucion temporal (microsegundos) de la "key" que se utiliza para guardar sesiones en la DB. La resolución anterior (sq.) era insuficiente y provocaba sistemáticamente colisiones en servidores con un mínimo de carga
- 0.0.2-3 / 23 Jun 2011
- Añadido un timeout en las operaciones sqlite3 para evitar el "database locked", que provoca un error de "redirección incorrecta" en los navegadores en el momento del login.
- Corregido bug en punteros de papi_post_handler (read_body). Ahora envía bien datos de los POSTs, por lo que ya se puede iniciar sesión en una página con un formulario.
- Quitada la comprobacion de certificados del CURL. No necesaria y complica la configuración.
- Ahora da error en caso de no poder salvar en la DB sqlite3. Esto facilita el debug.
- Ahora un reload de la pagina que lleve el parámetro ACTION=CHECKED funciona si existe el Lcook, y salva datos y reinicia el login si no. ( NOTA: un reload de un POST no funciona porque el NAVEGADOR no vuelve a enviar los datos - debido a las redirecciones intermedias).
- 0.0.2-4 / 8 Feb 2012
- Incluidos todos los inserts de "save" en una unica transaccion sqlite3
- Ahora se reutiliza la conexion a la DB sqlite3. Antes se cerraba a cada peticion.
- Ahora se crean indices en las tablas sqlite. Enorme mejora en rapidez cuando la DB es grande.
- Lo anterior obliga a BORRAR las .db despues de instalar la nueva version!
- 0.0.2-5 / 9 Feb 2012
- Se ha añadido un mecanismo de limpieza de la DBsqlite, para que no crezca indefinidamente a causa de los intentos de conexión que no terminan. Cada 30 minutos, se borran los registros que tienen más de 6 horas.
- 0.0.2-6 / 8 Ago 2012
- Supresion de la redireccion para seleccionar AS (wayf: built-in) si solo hay UN unico AS, pues no hay nada que escoger
- Si el login es mediante un GET, en vez de "simular" la peticion original, hace un REDIRECT una vez comprobada la autorizacion. Mas costoso, pero pero así el URL final está "limpio" (sin los parámetros del PAPI) y se puede recargar.
- Corregido de nuevo el pase de los parametros de un formulario POST al conectar.
- 0.0.2-7 / 8 Abril 2013
- Corregido el funcionamiento de PAPILcookMaxTimeout y PAPILcookTimeout (eran ignorados).
- Acepta el logout aunque el Lcook no sea valido (haya expirado,...)
- 0.0.2-8 / 8 Abril 2013
- Agnadido el cookie Lcook (no válido) también en la primera redireccion para poder usar PAPI con balanceadores por cookie usando el Lcook para persistencia de sesión.
- El envío de un formulario en fase de autenticación admite ahora Deflate gzip (¡viene configurado por defecto en apache!)
- 0.0.2-9 / 25 jun 2014
- Quitado expires=0 (craso error) en el cookie de balanceador!
- Corregido bug segmentation fault en caso reload de CHECKED
- 0.0.2-10 / 30 mar 2017
- Corregido un bug que impedía el funcionamiento cuando la petición no resultaba en un "filename" (p.e. cuando se usa un módulo para procesarla - WebSpehere)
- Añadido HTTPOnly en otros dos lugares donde se pone el Lcook (AV genera DOS cookies si no)
- Corregidos dos bugs que daban warnings en compilación ("%d en vez %ld" y "return if not value").
- 0.0.2-11 / 11 Feb 2021
- Quitado el ; al final del Lcook, que causaba problemas con ciertas aplicaciones.
- Añadido "Secure;" al Lcook, por la nueva política de cookies de los navegadores sobre "SameSite". Esto obliga a que el mod_papi funcione siempre en modo seguro (https); ya no se puede proteger un sitio http... lo cual es razonable por seguridad.
- 0.0.2-12 / 09 Mar 2021
- "PAPIUserDataRewrite" (aplicar expresión regular y sustitución a las "assertion") ahora funciona y puede usarse varias veces: las aplica por orden.
- 0.0.2-13 / 09 Jun 2021
- Añadido un parche para que no genere cookies incorrectos (path=*If) cuando se usa un <if> dentro del <location> del PAPI en la configuración del Apache (?).
- Rebajado nivel "warning" a "debug" de los mensajes "Lcook (deleted|invalid|empty)" en los logs.
- Corregido error 500 en que aparecía en los registros (access) al hacer ACTION=LOGOUT aunque el cliente recibía un 200.
- 0.0.2-14 / 09 Jun 2021
- Corregido redirecciones repetidas al recargar un ACTION=CHECKED con sesión ya inexistente en la DB.
- 0.0.2-15 / 06 Jul 2021
- Corregido "error 500" cuando se usa PAPIPassURLPattern en apache 2.4.
- Añadido r->user = ""; en todos los sitios en los que devuelve OK, para evitar error 500 en Apache 2.4.
- En vez de OK o ERROR 500 da Forbidden cuando no se define o encuentra el remote user attribute.
- Avisa si existe PAPIauth y no encuentra ANTES el usuario (no puede generar la cabecera Authorization).
- 0.0.2-16 / 06 Aug 2021
- Revisada la función papi_read_body (inicio de sesion al enviar un formulario POST) que en algunos casos (?) entraba en bucle y consumía toda la memoria.
- 0.0.2-17 / 17 Jun 2022
- Corregido problema con la DB: cuando hay varios servicios (DB's) PAPI en los mismos apache, cada apache utiliza la primera DB que abre en lugar de la que toca; bug debido a que mod_papi intenta reutilizar el file-handler. Ahora solo reutiliza el handler si es el mismo servicio.
- Soporte de DB's en fichero en vez de SQLite3. Se consigue definiendo "PAPIReqDB /dev/shm/serviceid.dir" (fichero DB que termina en .dir en lugar de .db). Incluye limpieza periódica del directorio. NO usar PAPIReqDBPath!. PAPIReqDB debe estar dentro del "location"!.
- Bug: error al crear la DB porque intenta limpiarla antes de crear esquema.
- Bug: error al usar DB si se borra sin reinicializar apache.
- 0.0.2-18 / 23 Jun 2022
- Reescrita papi_read_body OTRA vez: truncaba y destrozaba los POST cuando eran de más de 17KB. Ahora los POST deben funcionar bien por fin.
- 0.0.2-19 / 21 Mar 2023
- El Lcook pone ahora explícitamente el SameSite=Lax, aunque se supone que ése es el valor si no se pone.
- Al renovar la sesión en medio de una petición POST, mod_papi ahora pone los parámetros del URI (antes los perdía).
- Al renovar la sesión en medio de una petición POST, mod_papi devuelve las cabeceras de la aplicación (filtra Date, Content-Length, Keep-Alive, Connection, Transfer-Encoding, Server).
- Soporte CORS.
-
CORS: Nueva opción "PAPISetCORSHeaders" (Off|On, defecto On).
Si es "On" mod_papi procura contestar a las peticiones OPTIONS
preflight del CORS devolviendo las cabeceras CORS y contenido
vacío; también pone las cabeceras CORS cuando existe la cabecera
"Origin" en cualquier petición; mirroriza siempre
"Access-Control-Request-Headers" en "Access-Control-Allow-Headers"
y mirroriza el Origin en "Access-Control-Allow-Origin" en las
peticiones OPTIONS, dejando "null" en el resto (lo que
bloquea toda petición CORS que no provenga del mod_papi).
Esto permite que las sesiones PAPI se renueven en una petición AJAX cumpliendo el CORS cuando la sesión AS sigue activa y el AS devuelve las cabeceras CORS (cosa que ya hace).
La opción permite desactivar el manejo del CORS del mod_papi por si la aplicación necesita hacerse cargo (aunque tendrá entonces que tener en cuenta y gestionar también las peticiones CORS originadas por mod_papi).
NOTA: Para que la renovación automática con CORS funcione, también es necesario que las peticiones AJAX se hagan con la opción del XMLHttpRequest "xhr.withCredentials = true; - 0.0.2-20 / 6 Sep 2024
- Soporte para PCRE2 y PCRE2 activado por defecto. PCRE está obsoleto y ya no existe en Debian Trixie.
- Permisos por defecto más estrictos para la DB sqlite.
- Filtrado de la cabecera "Authorization" tanto en modo sqlite como en modo directorio.
- Encriptado de los valores de las cabeceras salvados en sqlite o en directorio.
Diferencias en la configuración
... PAPIAcceptFile /etc/apache2/PAPI/image_ok.png PAPIRejectFile /etc/apache2/PAPI/image_nok.png PAPILcookMaxTimeout 18000 # # NUEVA VERSION: Ya NO ES NECESARIO que pueda acceder # a los image*.png. No son necesarias estas líneas: ## <Directory /etc/apache2/PAPI> ## Order allow,deny ## Allow from all ## </Directory> ... # NUEVA VERSION: no hace falta que el fichero exista # basta con que el URL pedido CONTENGA PAPIAuthLocation # DEBE empezar con / solo si el Location no la tiene al final. # (lo concatena con el Location) PAPIAuthLocation /PAPI/cookie_handler.jpg