¿Exponer la información de excepciones en el servicio web es un riesgo para la seguridad? [duplicar]

16

Es un hecho conocido que la exposición de la información de excepción al usuario final ofrece riesgos de seguridad, ya que un adversario puede usarlo para averiguar cómo funcionan las cosas internamente y atacarlas. Pero ¿qué pasa con un servicio web, donde esa información podría ser relevante para los desarrolladores que consumen la API?

Por un lado, exponer el seguimiento de pila completo e incluso el mensaje es arriesgado, ya que podría contener cierta información de la base de datos, por ejemplo. por otro lado, si algo sale mal y el servidor simplemente dice 500 "lo siento", los desarrolladores se sentirían frustrados. Supongo que realmente la forma correcta es manejar todas las excepciones que conoce de manera segura, es decir, detectar excepciones de validación / negocios y devolverlas con códigos y mensajes de error especiales (sin pila de seguimiento) y, para todos los desconocidos, todavía tiene 500 "disculpas".

Pero me gustaría aquí cuáles son las formas comunes de hacerlo y qué enfoque se debe tomar desde el punto de vista de la seguridad.

    
pregunta Ilya Chernomordik 25.04.2016 - 15:46
fuente

3 respuestas

23

La API no debe exponer ninguna información interna, es decir, apilar rastreos o similar. Como realmente notó, podrían filtrar información que podría usarse para atacar la implementación.

Además, por lo general, solo son relevantes para el desarrollador de la API y no para el usuario de la API. De todos modos, estos usuarios esperan mensajes de error adecuados y no un mensaje extraño en el que deberían preguntar primero al desarrollador de API qué significa esto y el desarrollador debería mirar el código fuente. Por lo tanto, esto podría ser menos un problema de seguridad, pero más un problema de usabilidad de la API si solo le asigna al usuario un seguimiento de la pila en lugar de algo significativo para el usuario.

    
respondido por el Steffen Ullrich 25.04.2016 - 15:57
fuente
7

Por lo general, hay dos tipos de excepciones:

  • Excepciones esperadas, como valores de entrada no válidos; o fallo de autenticación; o pidiendo objeto no existente. De modo que puede (y debe) estar preparado para lidiar con este tipo con gracia, con un mensaje y un código de error descriptivo y documentado. No hay ningún punto de seguimiento de la pila en este caso.

  • Excepcionesinternas(oinesperadas):indisponibilidaddelabasededatos;memoriainsuficiente;errorensucódigoqueconducea NPE . Tampoco hay ningún punto en el seguimiento de pila para el usuario de API . Usted (como desarrollador), sin embargo, tiene interés en tales trazas de pila. En la mayoría de los casos, el propio usuario no puede resolver ese problema, por lo que debe ponerse en contacto con el desarrollador. Puede adjuntar encriptado el seguimiento de la pila a un mensaje "lo siento" genérico, para que usted, como desarrollador, pueda resolver el problema del usuario más fácilmente:

    
respondido por el deniss 25.04.2016 - 16:19
fuente
4

Es un problema de facilidad de uso frente a seguridad .

  • Una API , especialmente una REST, debe ser amigable , autodocumentada. Esto incluye dar errores amistosos que indican la error exacto, posible causa, pila, etc.

  • Por otra parte, piense que amigable es arriesgado ...

La respuesta es: Sí, es un problema de seguridad. La información ayudará a un posible atacante a saber más sobre su API.

¿Formas comunes de hacerlo?

En ASP.NET tiene la configuración en web.config para controlar cuán detallados son los errores ( CustomErrors ).

La configuración predeterminada muestra un error genérico de seguridad, excepto que está navegando desde la misma computadora , luego muestra un error completo. De esta manera, los desarrolladores en sus equipos locales pueden ver los errores, pero una vez implementados en un entorno, no se puede ver la información detallada de los errores.

<?xml version="1.0"?>
<configuration>
    <system.web>
        <customErrors mode="Off"/>
    </system.web>
</configuration>
    
respondido por el Oscar Foley 25.04.2016 - 16:17
fuente

Lea otras preguntas en las etiquetas