Eu tenho um pouco de discussão no meu local de trabalho e estou tentando descobrir quem está certo e qual é a coisa certa a fazer.
Contexto: um aplicativo da Web da intranet que nossos clientes usam para contabilidade e outros itens de ERP.
Sou da opinião de que uma mensagem de erro apresentada ao usuário (quando as coisas falham) deve incluir o máximo de informações possível, incluindo o rastreamento de pilha. Obviamente, ele deve começar com um belo "Ocorreu um erro, envie as informações abaixo para os desenvolvedores" em letras grandes e amigáveis.
Meu raciocínio é que uma captura de tela do aplicativo com falha geralmente será a única fonte de informações facilmente disponível. Claro, você pode tentar contatar o (s) administrador (es) de sistemas do cliente, tentar explicar onde estão seus arquivos de log, etc., mas isso provavelmente será lento e doloroso (conversar principalmente com os representantes do cliente).
Além disso, ter informações imediatas e completas é extremamente útil no desenvolvimento, onde você não precisa procurar nos arquivos de log para encontrar o que precisa em todas as exceções. (Mas isso pode ser resolvido com um comutador de configuração.)
Infelizmente, houve algum tipo de "auditoria de segurança" (não faço ideia de como eles fizeram isso sem as fontes ... mas tanto faz), e eles reclamaram das mensagens completas de exceção, citando-as como uma ameaça à segurança. Naturalmente, os clientes (pelo menos um que eu conheço) aceitaram isso pelo valor nominal e agora exigem que as mensagens sejam limpas.
Não vejo como um invasor em potencial poderia usar um rastreamento de pilha para descobrir algo que ele não poderia ter descoberto antes. Existem exemplos ou provas documentadas de alguém fazendo isso? Eu acho que devemos lutar contra essa ideia tola, mas talvez eu seja o tolo aqui, então ...
Quem está certo?
fonte
Unfortunately there has been some kind of "Security audit"
" - Sério? Que tipo de atitude é essa? As auditorias de segurança são para seu benefício - para melhorar seus sistemas, para encontrar os problemas antes dos bandidos. Você realmente deve considerar tentar trabalhar com eles, não contra eles. Além disso, você pode tentar obter mais informações sobre o PoV de segurança em Information Security .Respostas:
Costumo criar um log de aplicativo, no banco de dados ou no arquivo, e registrar todas essas informações para isso. Em seguida, você pode fornecer ao usuário um número de erro, que identifica a qual item de log o erro está relacionado, para que você possa recuperá-lo. Esse padrão também é útil, pois você pode seguir os erros, mesmo que os usuários não se preocupem em criá-los com você, para ter uma idéia melhor de onde estão os problemas.
Se o seu site estiver instalado no ambiente de um cliente e você não conseguir alcançá-lo, o departamento de TI no local enviará uma extração com base no erro não.
A outra coisa que você pode considerar é ter os detalhes de erros do sistema por e-mail em uma caixa de correio que você vê, para saber quando as coisas estão dando errado.
Fundamentalmente, ter um sistema que se destaca quando algo não está certo não inspira confiança em usuários não técnicos - tende a assustá-los a pensar que algo está muito errado (por exemplo, quanto de um BSOD você entende e como você sente quando alguém aparece)?
No stacktrace:
No .Net, o rastreamento de pilha mostrará o rastreamento completo diretamente nos principais assemblies originados pelo MS e revelará detalhes sobre quais tecnologias você está usando e também as possíveis versões. Isso fornece aos intrusos informações valiosas sobre possíveis pontos fracos que podem ser explorados.
fonte
Sim, existem muitos.
Um rastreamento de pilha pode revelar
... A lista continua e continua. Basicamente, todas as decisões de design em um aplicativo grande podem ser relevantes para a segurança e quase todas podem ser distribuídas por nomes de métodos ou módulos. Lembre-se, isso não significa que ainda não faz sentido exibir um rastreamento de pilha se o ambiente ao qual ele é submetido é seguro (por exemplo, uma intranet em vez de um site voltado para a Internet), mas o custo em segurança definitivamente não é zero .
fonte
O problema é que não é nosso trabalho principal facilitar as coisas para nós mesmos. É nosso trabalho facilitar as coisas para o usuário final. Para nós, um rastreamento de pilha parece uma informação extremamente útil para fornecer um desenvolvedor. Para um usuário, parece uma bobagem completa que não serve para nada. Mesmo se você disser o contrário, eles não o internalizam. Se você acha difícil obter essas informações dos administradores de sistema, obtê-las dos usuários finais é ainda pior.
No que diz respeito à segurança, você pode ter razão se for um aplicativo de desktop. Nesse caso, imprimir um rastreamento de pilha não fornece nada que um invasor ainda não saiba. Em um aplicativo Web, essas informações ainda não estão disponíveis para um invasor. Você está realmente expor detalhes internos que vão fazer um ataque a muito mais fácil.
Por que não ignorar as duas fontes de preocupação e receber automaticamente os relatórios de exceção? Dessa forma, você nem precisa se preocupar com pessoas que não relatam erros.
fonte
Dê uma olhada nesta questão do IT Security SE . Em resumo, um rastreamento de pilha pode fornecer ao invasor mais informações para trabalhar. Quanto mais informações o invasor tiver, maior será a probabilidade de elas invadirem seu sistema. Eu não basearia minha segurança no fato de que os rastreamentos de pilha estão sempre ocultos, mas isso também não significa que você deve fornecer essas informações aos invasores.
Você pode obter a maioria dos benefícios do log de back-end adequado de qualquer maneira. É um pouco menos conveniente, mas provavelmente não vale a pena arriscar a segurança do seu sistema e incomodar seus clientes.
fonte
Você pode considerar não mostrar um rastreamento de pilha pelos seguintes motivos.
Segurança
Mostrar um rastreamento de pilha revela possíveis superfícies de ataque que seriam hackers. As intranets não são imunes a hackers. Isso refletiria muito mal em você se sua rede fosse invadida por causa de um aplicativo pelo qual você é responsável
Experiência de usuário
Para a melhor experiência do usuário, um rastreamento de strack é muita informação. Sim, as informações adequadas sobre uma condição de erro devem ser registradas e receber atenção de um engenheiro. No entanto, pedir a um usuário que faça o que você pode automatizar não será o melhor para o usuário.
Sua Reputação
Sempre que um rastreamento de pilha é mostrado em um site, ele fica ruim. A maioria das pessoas não tem idéia do que é e isso as faz sentir que o site não é amigável para elas. Para quem sabe o que é, pode ser uma indicação de que o aplicativo não foi bem pensado. Muitos aplicativos mal gravados mostram rastreamentos de pilha com muita frequência porque é o padrão em algumas estruturas como o ASP.Net.
fonte
Resposta curta: em uma extranet ou site da Internet, faz sentido não mostrar o rastreamento de pilha. Em uma intranet, os benefícios de mostrar o rastreamento de pilha superam os de ocultá-lo.
Resposta longa:
O mesmo aconteceu comigo no trabalho. Eu pensava que, se um aplicativo falha, deve falhar ruidosamente.
Mas eles me explicaram que um hacker em potencial poderia inferir muitas coisas de um stacktrace.
Eu acho que não há necessidade de prova. É evidente que quanto mais um hacker souber sobre sua plataforma, melhor para ele e que quanto menos um hacker souber sobre sua plataforma, melhor para você .
Além disso, as empresas não desejam divulgar como um hacker invadiu seus sistemas.
Por outro lado, é uma intranet e acho que as vantagens de saber imediatamente o que deu errado sem ter que pesquisar um arquivo de log são de grande vantagem e os riscos de segurança de mostrar um rastreamento de pilha dentro dos limites da sua empresa não são tão altos quanto eles estão dizendo.
fonte
Em qualquer produto entregue, o número esperado desse tipo de erro deve ser zero. A utilidade dessas informações para o cliente é zero. Em ambas as contagens, não há razão para apresentar um rastreamento de pilha. Se houver algum contexto útil, ele deverá ser apresentado de maneira amigável ao cliente, não como um rastreamento de pilha.
Por outro lado, se o número real de ocorrências não for zero, você precisa desesperadamente dessas informações e não deve confiar no cliente para enviá-las a você. 99,99% do tempo eles não vão. Você deve instalar um sistema de relatório de erros que envie as informações automaticamente, com apenas um "ok" do cliente.
fonte