Tengo un poco de discusión en mi lugar de trabajo y estoy tratando de averiguar quién tiene la razón y qué es lo que hay que hacer.
Contexto: una aplicación web de intranet que nuestros clientes usan para contabilidad y otras cosas de ERP.
Soy de la opinión de que un mensaje de error presentado al usuario (cuando las cosas se bloquean) debe incluir tanta información como sea posible, incluido el seguimiento de la pila. Por supuesto, tiene que comenzar con un agradable "Se ha producido un error, envíe la siguiente información a los desarrolladores" en letras grandes y amigables.
Mi razonamiento es que una captura de pantalla de la aplicación bloqueada a menudo será la única fuente de información fácilmente disponible. Claro, puede intentar ponerse en contacto con los administradores de sistemas del cliente, intentar explicar dónde están sus archivos de registro, etc., pero eso probablemente será lento y doloroso (hablar con los representantes del cliente es mayormente).
Además, tener una información inmediata y completa es extremadamente útil en el desarrollo, donde no tiene que buscar los archivos de registro para encontrar lo que necesita en cada excepción. (Pero eso podría resolverse con un interruptor de configuración).
Desafortunadamente ha habido algún tipo de "auditoría de seguridad" (no tengo idea de cómo lo hicieron sin las fuentes ... pero lo que sea), y se quejaron de los mensajes de excepción completos que los citaban como una amenaza a la seguridad. Naturalmente, los clientes (al menos uno que conozco) lo han tomado al pie de la letra y ahora exigen que se limpien los mensajes.
No veo cómo un atacante potencial podría usar un seguimiento de pila para descubrir algo que no podría haber descubierto antes. ¿Hay algún ejemplo, alguna prueba documentada de que alguien haya hecho eso? Creo que deberíamos luchar contra esta idea tonta, pero tal vez yo soy el tonto aquí, así que ...
¿Quién tiene la razón?
fuente
Unfortunately there has been some kind of "Security audit"
" - ¿En serio? ¿Qué tipo de actitud es esa? Las auditorías de seguridad son para su beneficio: para mejorar sus sistemas, para encontrar los problemas antes que los malos. Realmente deberías considerar tratar de trabajar con ellos, no en contra de ellos. Además, puede intentar obtener más información sobre el punto de vista de seguridad en Information Security .Respuestas:
Tiendo a construir un registro de aplicación, ya sea en DB o en archivo, y registrar toda esa información en eso. Luego puede darle al usuario un número de error, que identifica con qué elemento de registro está relacionado el error, para que pueda recuperarlo. Este patrón también es útil, ya que puede seguir los errores incluso si los usuarios no se molestan en plantearlos con usted, para que pueda tener una mejor idea de dónde están los problemas.
Si su sitio está instalado en el entorno de un cliente y no puede acceder a él, puede obtener el departamento de TI en el sitio para que le envíe un extracto basado en el error no.
La otra cosa que podría considerar es que el sistema envíe por correo electrónico los detalles de los errores a un buzón que tenga a la vista, para que sepa cuándo las cosas van mal.
Básicamente, tener un sistema que explota cuando algo no está bien no inspira confianza en los usuarios no técnicos; tiende a asustarlos para que piensen que algo está muy mal (por ejemplo, qué tanto BSOD entiendes y cómo te sientes cuando aparece uno)
En stacktrace:
En .Net, el seguimiento de la pila mostrará el seguimiento completo directamente en los ensamblados centrales de MS y revelará detalles sobre las tecnologías que está utilizando y las posibles versiones también. Esto proporciona a los intrusos información valiosa sobre posibles debilidades que podrían explotarse.
fuente
Sí, hay muchos.
Un rastro de pila puede revelar
... La lista sigue y sigue. Básicamente, cada decisión de diseño en una aplicación grande puede ser relevante para la seguridad, y casi todas se pueden regalar a través de métodos o nombres de módulos. Eso sí, eso no significa que todavía no tenga sentido mostrar un seguimiento de la pila si el entorno al que se envía es seguro (por ejemplo, una intranet en lugar de un sitio web con conexión a Internet), pero el costo en seguridad definitivamente no es cero .
fuente
La cuestión es que no es nuestro trabajo principal facilitarnos las cosas. Nuestro trabajo es facilitar las cosas al usuario final. Para nosotros, un seguimiento de pila parece una información extremadamente útil para proporcionar un desarrollador. Para un usuario, parece un galimatías completo que no sirve de nada. Incluso si les dices lo contrario, no lo internalizan. Si cree que es difícil obtener esa información de los administradores del sistema, es aún peor obtenerla de los usuarios finales.
En lo que respecta a la seguridad, es posible que tenga un punto si se trata de una aplicación de escritorio. En ese caso, imprimir un seguimiento de pila no proporciona nada que un atacante ya no sepa. En una aplicación web, esa información no está disponible para un atacante. De hecho, está exponiendo detalles internos que harán que un ataque sea mucho más fácil.
¿Por qué no omitir ambas fuentes de preocupación y recibir informes de excepción que se le envían automáticamente? De esa manera, ni siquiera tiene que preocuparse de que las personas no informen errores.
fuente
Eche un vistazo a esta pregunta de IT Security SE . En resumen, un seguimiento de la pila puede proporcionar al atacante más información para trabajar. Cuanta más información tenga el atacante, es más probable que penetre en su sistema. No basaría mi seguridad en el hecho de que los rastros de la pila siempre están ocultos, pero eso tampoco significa que deba dar esa información a los atacantes.
De todos modos, puede obtener la mayoría de los beneficios del registro de backend adecuado. Es un poco menos conveniente, pero probablemente no valga la pena arriesgar la seguridad de su sistema y molestar a sus clientes.
fuente
Puede considerar no mostrar un seguimiento de la pila por los siguientes motivos.
Seguridad
Mostrar un seguimiento de la pila revela posibles superficies de ataque para ser piratas informáticos. Las intranets no son inmunes a la piratería. Se reflejaría mal en usted si su red fue pirateada debido a una aplicación de la que usted es responsable
Experiencia de usuario
Para la mejor experiencia del usuario, una traza de seguimiento es demasiada información. Sí, la información adecuada sobre una condición de error debe registrarse y recibir atención de un ingeniero. Sin embargo, pedirle a un usuario que haga lo que puede automatizar no será lo mejor para el usuario.
Tu reputación
Cada vez que se muestra un seguimiento de pila en un sitio web, se ve mal. La mayoría de las personas no tienen idea de qué es y eso les hace sentir que el sitio web no es amigable para ellos. Para aquellos que sí saben lo que es, puede ser una indicación de que la aplicación no fue bien pensada. Muchas aplicaciones mal escritas muestran trazas de pila con demasiada frecuencia porque es el valor predeterminado en algunos marcos como ASP.Net.
fuente
Respuesta corta: en una extranet o sitio de internet, tiene sentido no mostrar el stacktrace. En una intranet, los beneficios de mostrar el stacktrace superan a los de ocultarlo.
Respuesta larga:
Lo mismo me sucedió en el trabajo. Solía pensar que si una aplicación falla, debería fallar ruidosamente.
Pero luego me explicaron que un pirata informático potencial podría inferir muchas cosas de un stacktrace.
Creo que no hay necesidad de pruebas. Es evidente que cuanto más sepa un pirata informático sobre su plataforma, mejor para él y cuanto menos sepa un pirata informático sobre su plataforma, mejor para usted .
Además, las empresas no están ansiosas por revelar cómo un hacker irrumpió en sus sistemas.
Por otro lado, es una intranet , y creo que las ventajas de saber de inmediato qué salió mal sin tener que buscar un archivo de registro son una gran ventaja y los riesgos de seguridad de mostrar un seguimiento de pila dentro de los límites de su empresa no son tan altos como ellos están diciendo.
fuente
En cualquier producto entregado, el número esperado de este tipo de error debe ser cero. La utilidad de esta información para el cliente es cero. En ambos casos, no hay razón para presentar un seguimiento de la pila. Si hay algún contexto útil, debe presentarse de manera amigable para el cliente, no como un seguimiento de la pila.
Por otro lado, si el número real de ocurrencias no es cero, necesita desesperadamente esta información y no debe confiar en que el cliente se la envíe. 99.99% de las veces no lo harán. Debe instalar un sistema de respuesta de errores que envíe la información automáticamente, con solo un "ok" del cliente.
fuente