中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > Web开发 > .NET > ASP.NET
显示安全的错误信息
作者:佚名 时间:2005-06-08 14:30 出处:互连网 责编:chinaitpower
              摘要:暂无

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

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

  • 将应用程序配置为不向远程(应用程序)用户显示详细错误信息。您也可以选择将错误重定向到应用程序页。
  • 只要可行就包括错误处理,并编写您自己的错误信息。在您的错误处理程序中,您可以进行测试以确定用户是否为本地用户并作出相应的响应。
  • 在捕捉所有未处理异常并将它们发送到一般错误页的页级别或应用程序级别上,创建全局错误处理程序。这样,即使您没有预料到某个问题,至少用户不会看到异常页。

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

  • 在应用程序的 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-finally 块。
  2. (可选)使用 Context 对象的 UserHostAddress 属性对本地用户进行测试并相应地修改错误处理。值 127.0.0.1 等效于“localhost”并指示浏览器与 Web 服务器位于同一台计算机上。

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

    ' Visual Basic
        Try
        SqlConnection1.Open()
        SqlDataAdapter1.Fill(Me.DsPubs1)
        Catch ex As Exception
        If HttpContext.Current.Request.UserHostAddress = "127.0.0.1" Then
        Session("CurrentError") = ex.Message
        Else
        Session("CurrentError") = "Error processing page."
        End If
        Server.Transfer("ApplicationError.aspx")
        Finally
        SqlConnection1.Close()
        End Try
        // C#
        try
        {
        sqlConnection1.Open();
        sqlDataAdapter1.Fill(dsCustomers1);
        }
        catch (Exception ex)
        {
        if(HttpContext.Current.Request.UserHostAddress == "127.0.0.1")
        { Session["CurrentError"] = ex.Message; }
        else
        { Session["CurrentError"] = "Error processing page."; }
        Server.Transfer("ApplicationError.aspx");
        }
        finally
        {
        this.sqlConnection1.Close();
        }

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

创建全局错误处理程序

  • 要创建页中的全局处理程序,请创建 Page_Error 事件的处理程序。要创建应用程序范围的错误处理程序,请在 Global.asax 文件中将代码添加到 Application_Error 方法。只要您的页或应用程序中发生未处理的异常,就会调用这些方法。您可以从 HttpServerUtility.GetLastError 方法获取有关最新错误的信息。
    注意   如果您具有全局错误处理程序,则它优先于在 Web.config customErrors 元素的 defaultRedirect 属性中指定的错误处理。

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

    ' Visual Basic
        Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        Session("CurrentError") = "Global: " & Server.GetLastError.Message
        Server.Transfer("lasterr.aspx")
        End Sub
        // C#
        protected void Application_Error(Object sender, EventArgs e)
        {
        Session["CurrentError"] = "Global: " +
        Server.GetLastError().Message;
        Server.Transfer("lasterr.aspx");
        }
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有