如何:显示安全错误信息

本文介绍如何在应用程序显示错误信息时,避免泄露敏感信息,通过配置Web.config文件、实现错误处理和创建全局错误处理程序,确保只向本地用户展示详细错误,同时在远程用户下提供统一的错误页面,提升系统的安全性。
摘要由CSDN通过智能技术生成
 

在您的应用程序显示错误信息时,它不应该泄露有助于恶意用户攻击您系统的信息。例如,如果您的应用程序试图登录数据库时没有成功,则显示的错误信息不应该包括它正在使用的用户名。

有许多方法可以控制错误信息,包括:

  • 将应用程序配置为不向远程用户显示详细错误信息。(远程用户是指在 Web 服务器计算机上工作但未请求页的用户。)您也可以选择将错误重定向到应用程序页。

  • 只要可行就包括错误处理,并编写您自己的错误信息。在您的错误处理程序中,可以进行测试以确定用户是否为本地用户并做出相应的响应。

  • 在捕捉所有未处理异常并将它们发送到一般错误页的页级别或应用程序级别上,创建全局错误处理程序。这样,即使您没有预料到某个问题,至少用户不会看到异常页。

将应用程序配置为不向远程用户显示错误

  • 在应用程序的 Web.config 文件中,对 customErrors 元素进行以下更改:

    • mode 属性设置为 RemoteOnly(区分大小写)。这就将应用程序配置为仅向本地用户(即,您 - 开发人员)显示详细的错误。

    • (可选)包括指向应用程序错误页的 defaultRedirect 属性。

    • (可选)包括将错误重定向到特定页的 <error> 元素。例如,您可以将标准 404 错误(未找到页)重定向到您自己的应用程序页。

    下面的代码示例显示 Web.config 文件中的典型 customErrors 块。

    <customErrors mode="RemoteOnly" defaultRedirect="AppErrors.aspx"> 
       <error statusCode="404" redirect="NoSuchPage.aspx"/> 
       <error statusCode="403" redirect="NoAccessAllowed.aspx"/> 
    </customErrors> 
    

包括错误处理

  1. 在任何可能生成错误的语句周围使用一个 try-catch 块。

  2. 可以选择使用 IsLocal 属性对本地用户进行测试并相应地修改错误处理。值 127.0.0.1 等效于 localhost,指示浏览器与 Web 服务器位于同一台计算机上。

    下面的代码示例显示一个错误处理块。如果发生错误,则用有关消息的详细信息加载 Session 状态变量,然后应用程序显示可以读取 Session 变量并显示错误的页。(有意写入此错误以便不向用户提供任何可利用的详细信息。)如果用户是本地用户,则提供不同的错误详细信息。在 finally 块中,释放开放式资源。

    不支持该语言或没有可用的代码示例。
    

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

您也可以创建一个这样的错误处理程序,它在页级别上或为整个应用程序捕捉所有未处理的异常。

创建全局错误处理程序

  • 若要在页中创建全局处理程序,请创建 TemplateControl.Error 事件的处理程序。若要创建应用程序范围的错误处理程序,请在 Global.asax 文件中将代码添加到 HttpApplication.Error 事件。只要您的页或应用程序中发生未处理的异常,就会相应地调用这些方法。您可以从 GetLastError 方法获取有关最新错误的信息。

    说明:

    如果您具有全局错误处理程序,则它优先于在 customErrors 配置元素的 defaultRedirect 属性中指定的错误处理。

    下面的代码示例显示一个处理程序,它获取有关当前错误的信息,将其放在 Session 变量中,然后调用可以提取和显示错误信息的一般性错误处理页。

     
    VB
    C#
    C++
    F#
     
    不支持该语言或没有可用的代码示例。
    

     
    VB
    C#
    C++
    F#
     
    protected void Application_Error(Object sender, EventArgs e)
    {
        Session["CurrentError"] = "Global: " + 
            Server.GetLastError().Message;
        Server.Transfer("lasterr.aspx");
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值