Partilhar via


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

  1. Use um bloco try-catch ao redor de quaisquer instruções que pode 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();
    }
    

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

Consulte também

Outros recursos

Protegendo sites da Web ASP.NET