Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Manejo global de errores en el framework

5 tareas · 40 min · Principiante

Todo framework tiene un último lugar al que llegan las excepciones que nadie manejó. Bien configurado, registra lo que importa y responde sin enseñar nada; mal configurado, esconde las fallas que más importan o devuelve al cliente el mensaje interno de cualquier error. Droguería Siemprevida no encuentra en su registro ni una línea de las dos caídas de su pasarela en noviembre. Te entrega su configuración de excepciones, la lista de sus excepciones propias, los bloques catch de sus controladores, el conteo de errores del mes y dos respuestas de producción.

0 de 5 · 0%

Objetivo de la sala

Todo framework tiene un último lugar al que llegan las excepciones que nadie manejó. Bien configurado, registra lo que importa y responde sin enseñar nada; mal configurado, esconde las fallas que más importan o devuelve al cliente el mensaje interno de cualquier error. Droguería Siemprevida no encuentra en su registro ni una línea de las dos caídas de su pasarela en noviembre. Te entrega su configuración de excepciones, la lista de sus excepciones propias, los bloques catch de sus controladores, el conteo de errores del mes y dos respuestas de producción.

En las versiones recientes de Laravel, como la 12, el manejo global se configura en bootstrap/app.php con withExceptions. Ahí se decide qué se registra (report), qué clases no se registran nunca (dontReport) y cómo se convierte una excepción en respuesta (render). La cantidad de detalle que se muestra la gobierna además el ajuste de depuración, que en producción tiene que estar apagado. El Top 10 de OWASP recomienda exactamente esta pieza: un manejo centralizado y coherente, con un manejador global como último recurso.

Último recurso es la palabra importante. El manejador global garantiza que nada salga en crudo y que todo quede registrado, pero no conoce el negocio: no sabe si un pedido se retiene, se revierte o se reintenta. Eso se decide donde ocurre la excepción. Y como todo pasa por él, un error en su configuración se repite en toda la aplicación a la vez.

Responde para continuar

¿Qué papel le corresponde al manejador global de excepciones?

Ver pista de ayuda

Pregúntate qué sabe el manejador global sobre el pedido que estaba en curso.

Abre el laboratorio y lee app.php con excepciones-propias.txt al lado. La lista que no se reporta se armó para quitar ruido, y dos de sus clases son errores esperados cuya causa es el cliente. La tercera es otra cosa. Compara con errores-reportados-nov.txt: el proveedor de pagos tuvo dos incidentes ese mes y el conteo de la tienda no lo refleja.

Responde para continuar

¿Qué excepción de la lista que no se reporta corresponde a la falla de una dependencia? Escríbela tal como aparece en app.php.

Ver pista de ayuda

Lee qué significa cada clase de la lista según la documentación interna.

El render de la configuración responde a toda excepción de la API con su clase y su mensaje, y siempre con código 500. El mensaje de una excepción se escribió para quien depura, no para el cliente: en una falla de conexión a la base de datos puede traer el motor, el servidor y la consulta. Y el código fijo en 500 rompe el otro extremo: un error de validación del cliente sale como si fuera del servidor. Lee respuestas-capturadas.txt.

Responde para continuar

¿Qué servidor interno aparece en una respuesta de producción por culpa de la forma en que el render global arma el cuerpo? Escríbelo completo.

Ver pista de ayuda

Está dentro del mensaje de la excepción de la base de datos.

El manejador global solo ve lo que llega hasta él. Un catch que atrapa una excepción genérica y no hace nada con ella la hace desaparecer antes: no se registra, no se alerta y el usuario recibe una respuesta que finge normalidad. El catálogo CWE tiene nombre para las dos partes del problema: capturar una excepción genérica (CWE-396) y detectar un error sin actuar (CWE-390). Lee catch-en-controladores.txt y separa los bloques que capturan algo genérico de los que capturan una excepción concreta y esperada; de los genéricos, descarta los que reportan, registran o vuelven a lanzar.

Responde para continuar

¿Cuántos bloques capturan una excepción genérica y no la reportan, no la registran ni la vuelven a lanzar?

Ver pista de ayuda

Seis bloques capturan algo genérico; mira qué hace cada uno en las líneas siguientes.

Los hallazgos de esta sala se corrigen en dos sitios. En la configuración global: las fallas de dependencias se reportan siempre, y la API responde con un formato propio para el cliente, el código de estado que corresponde a cada error y un identificador del incidente, dejando el mensaje interno solo en el registro. En los controladores: cada catch genérico que se traga el error pasa a reportarlo o se reemplaza por una captura de la excepción concreta que se espera.

Responde para continuar

¿Qué cambio en bootstrap/app.php corrige lo que encontraste en la configuración global?

Ver pista de ayuda

Lo que falla en una dependencia tiene que verse en el registro, y lo interno no tiene que verse en la respuesta.

Inicia sesión para registrar tus puntos y progreso en el ranking.

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