Como: Exibição Safe erro Messages

Quando seu aplicativo exibe mensagens de erro, ele não deve dar informações que um usuário mal-intencionado pode achar útil para atacar seu sistema. Por exemplo, se seu aplicativo tenta sem sucesso fazer logon em um banco de dados, ele não deve exibir uma mensagem de erro que inclui o nome do usuário que está usando.

Há um certo número de maneiras de controlar as mensagens de erro, incluindo o seguinte:

  • Configure o aplicativo para não exibir mensagens de erro detalhadas para 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 ver se o usuário é local e reagir de acordo.

  • Criar um manipulador de erro global no nível da página ou aplicativo que captura todas as exceções não tratadas e as encaminha para uma página de erro genérico. Dessa forma, mesmo se você não antecipar um problema, pelo menos os usuários não verá 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 para RemoteOnly (case-sensitive). Isso configura o aplicativo para mostrar erros detalhados somente para usuários locais (isto é, para você, o desenvolvedor).

    • Opcionalmente incluir um atributo defaultRedirect que aponta para uma página de erro de aplicação.

    • Opcionalmente, inclua elementos <error> que redirecionem erros específicos para páginas específicas. Por exemplo, você pode redirecionar erros padrão 404 (página não encontrada) para sua própria página do 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

  1. Use um bloco try-catch em torno de quaisquer declarações que possam gerar erros.

  2. 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();
    }
    

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çãoObservaçã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");
    }
    

Contribuições da comunidade

ADICIONAR
Mostrar: