Como: Exibição Safe erro Messages
Quando seu aplicativo exibe mensagens de erro, ele não deve fornecer informações que possam ser úteis a um usuário mal-intencionado para atacar seu sistema.Por exemplo, se seu aplicativo tenta, sem sucesso, dar logon em um banco de dados, ele não deve exibir uma mensagem de erro que inclua o nome de usuário que está usando.
Há um várias maneiras para controlar mensagens de erro, incluindo o seguinte:
Configure o aplicativo para não mostrar mensagens de erro detalhadas a usuários remotos.(Os usuários remotos são aqueles que não estão solicitando páginas enquanto trabalham no computador servidor Web.) Opcionalmente, você pode redirecionar erros para uma página do aplicativo.
Inclua manipulação de erro sempre que for prático e crie suas próprias mensagens de erro.No seu manipulador de erro, você pode testar para verificar se o usuário é local e reagir de acordo.
Crie um manipulador de erro global na página ou no nível do aplicativo que captura todas as exceções não tratadas e roteia-as para uma página de erro genérica.Dessa forma, mesmo se você não antecipou um problema, pelo menos os usuários não verão uma página de exceção.
Configurar o aplicativo para desativar os erros para os usuários remotos
No arquivo Web.config para seu aplicativo, faça as seguintes alterações para o elemento customErrors:
Defina o atributo mode como RemoteOnly (diferencia maiúsculas de minúsculas).Isso configura o aplicativo para mostrar erros detalhados somente para usuários locais (ou seja, para você, o desenvolvedor).
Opcionalmente, inclua um atributo defaultRedirect que aponte para uma página de erro do aplicativo.
Opcionalmente, inclua elementos <error> que redirecionem erros específicos para páginas específicas.Por exemplo, você pode redirecionar erros 404 padrão (Página não encontrada) para sua própria página de aplicativo.
O exemplo de código a seguir mostra um bloco customErrors típico no arquivo Web.config.
<customErrors mode="RemoteOnly" defaultRedirect="AppErrors.aspx"> <error statusCode="404" redirect="NoSuchPage.aspx"/> <error statusCode="403" redirect="NoAccessAllowed.aspx"/> </customErrors>
Para incluir manipulação de erro
Use um bloco try-catch ao redor de quaisquer instruções que pode gerar erros.
Opcionalmente, teste para um usuário local com a propriedade IsLocal e modifique a manipulação de erro de acordo.O valor 127.0.0.1 é equivalente a localhost e indica que o navegador está no mesmo computador como o servidor Web.
O exemplo de código a seguir mostra um bloco de tratamento de erros.Se um erro ocorrer, uma variável de estado de sessão é carregada com detalhes sobre a mensagem, e o aplicativo, em seguida, exibe uma página que pode ler a variável Session e exibir o erro.(O erro é deliberadamente gravado para não fornecer nenhum detalhe aproveitável para o usuário.) Se o usuário for local, detalhes de erro diferentes são fornecidos.No bloco finally, um recurso aberto é lançado.
Try SqlConnection1.Open() SqlDataAdapter1.Fill(Me.DsPubs1) Catch ex As Exception If Request.IsLocal Then Session("CurrentError") = ex.Message Else Session("CurrentError") = "Error processing page." End If Server.Transfer("ApplicationError.aspx") Finally SqlConnection1.Close() End Try
try { sqlConnection1.Open(); sqlDataAdapter1.Fill(dsCustomers1); } catch (Exception ex) { if(Request.IsLocal) { Session["CurrentError"] = ex.Message; } else { Session["CurrentError"] = "Error processing page."; } Server.Transfer("ApplicationError.aspx"); } finally { this.sqlConnection1.Close(); }
Criando um manipulador de erro global
Você também pode criar um manipulador de erro que captura todas as exceções não tratadas no nível da página ou para o aplicativo como um todo.
Para criar um manipulador de erro global
Para criar um manipulador global em uma página, crie um manipulador para o evento TemplateControl.Error.Para criar um manipulador de erro Application-Wide, no arquivo Global.asax, adicione código ao evento HttpApplication.Error.Esses métodos são chamados se uma exceção não tratada ocorrer em qualquer lugar na sua página ou aplicativo, respectivamente.Você pode obter informações sobre o erro mais recente a partir do método GetLastError.
Observação: Se você tiver um manipulador de erro global, ele tem precedência sobre o tratamento de erros especificado no atributo defaultRedirect do elemento de configuração customErrors.
O exemplo de código a seguir mostra um manipulador que obtém informações sobre o erro atual, coloca-o em uma variável Session e, em seguida, chama uma página genérica de tratamento de erros que pode extrair e exibir as informações de erro.
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) Session("CurrentError") = "Global: " & _ Server.GetLastError.Message Server.Transfer("lasterr.aspx") End Sub
protected void Application_Error(Object sender, EventArgs e) { Session["CurrentError"] = "Global: " + Server.GetLastError().Message; Server.Transfer("lasterr.aspx"); }