El manejo de errores y excepciones en las aplicaciones web puede presentar problemas de seguridad, a menudo en forma de denegación de servicio (es decir, cuando un servicio falla debido a un mal manejo de errores) y divulgación de información (es decir, cuando una excepción contiene detalles confidenciales sobre el El sistema se propaga al usuario / atacante).
Para combatir esto, el sistema debe fallar con gracia, revelar pequeños detalles sobre la falla y recuperarse tanto como sea posible. Cuando se trata de excepciones, los lenguajes administrados tienen mecanismos simples y bien entendidos para el manejo de excepciones. Sin embargo, a lo largo de mi investigación no he podido encontrar consejos sobre cómo construir un mecanismo adecuado de manejo de excepciones en las aplicaciones web modernas que incluyan varias capas de lógica entre la base de datos y las aplicaciones cliente.
Por ejemplo, Spring Framework tiene el controlador (que proporciona las API y las solicitudes HTTP), el servicio (que contiene la mayoría de la lógica empresarial) y los repositorios (que manejan la comunicación entre la aplicación y la base de datos). Además, el servicio puede interactuar con componentes y módulos de utilidad que ofrecen varias funcionalidades (es decir, acceso a archivos, cálculo de algoritmos). El siguiente diagrama de flujo de datos ilustra esta arquitectura.
Alexaminarelorigendelasexcepciones,podemosverqueelmotordecálculo,elrepositorioylautilidaddeaccesoaarchivospueden(potencialmente)revelaralgunosdetallessobreelsistema,encasodequeseproduzcaunaexcepciónalinteractuarconlosdiferentesalmacenesdedatos(esdecir,información).sobrelabasededatosSQL,elesquemadelabasedeconocimientos,etc.).
Laspreguntasentoncesseconviertenen:¿dóndedeberíanlosdesarrolladoresmanejarestasexcepcionesyreducirelriesgotantodeladivulgacióndeinformacióncomodeladenegacióndeservicio?
Unenfoquequemepareceadecuadoesmanejarlasexcepcionesamedidaquesurjanyenvolverlasenexcepcionesespecíficasdelaaplicación.Laspartesdelaaplicaciónquetienenflujosdedatosquecruzanunlímitedeconfianza(porejemplo,alsistemadearchivos,Internet)debenlimpiartodaslasexcepcionesalincluirlasenexcepcionespersonalizadas"más amigables" (creadas por los desarrolladores) para evitar cualquier riesgo. la divulgación de información se está propagando aún más, así como para localizar cualquier falla del componente. Los componentes internos deben saber cómo manejar las excepciones de aplicación de manera más adecuada.
El principal inconveniente de este enfoque es que el mecanismo de manejo de excepciones es más complejo, ya que requiere la introducción de excepciones específicas de la aplicación para cada categoría de excepciones nativas (y aplicables).
¿Este enfoque tiene otras ventajas y desventajas, y existe un diseño alternativo que maneje mejor el equilibrio entre la seguridad y la carga de trabajo?