在您的应用程序显示错误信息时,它不应该泄露有助于恶意用户攻击您系统的信息。例如,如果您的应用程序试图登录数据库时没有成功,则显示的错误信息不应该包括它正在使用的用户名。
有许多方法可以控制错误信息,包括:
-
将应用程序配置为不向远程用户显示详细错误信息。(远程用户是指在 Web 服务器计算机上工作但未请求页的用户。)您也可以选择将错误重定向到应用程序页。
-
只要可行就包括错误处理,并编写您自己的错误信息。在您的错误处理程序中,可以进行测试以确定用户是否为本地用户并做出相应的响应。
-
在捕捉所有未处理异常并将它们发送到一般错误页的页级别或应用程序级别上,创建全局错误处理程序。这样,即使您没有预料到某个问题,至少用户不会看到异常页。
将应用程序配置为不向远程用户显示错误
-
在应用程序的 Web.config 文件中,对 customErrors 元素进行以下更改:
-
将 mode 属性设置为 RemoteOnly(区分大小写)。这就将应用程序配置为仅向本地用户(即,您 - 开发人员)显示详细的错误。
-
(可选)包括指向应用程序错误页的 defaultRedirect 属性。
-
(可选)包括将错误重定向到特定页的 <error> 元素。例如,您可以将标准 404 错误(未找到页)重定向到您自己的应用程序页。
下面的代码示例显示 Web.config 文件中的典型 customErrors 块。
-
包括错误处理
您也可以创建一个这样的错误处理程序,它在页级别上或为整个应用程序捕捉所有未处理的异常。
创建全局错误处理程序
-
若要在页中创建全局处理程序,请创建 TemplateControl.Error 事件的处理程序。若要创建应用程序范围的错误处理程序,请在 Global.asax 文件中将代码添加到 HttpApplication.Error 事件。只要您的页或应用程序中发生未处理的异常,就会相应地调用这些方法。您可以从 GetLastError 方法获取有关最新错误的信息。
说明: 如果您具有全局错误处理程序,则它优先于在 customErrors 配置元素的 defaultRedirect 属性中指定的错误处理。
下面的代码示例显示一个处理程序,它获取有关当前错误的信息,将其放在 Session 变量中,然后调用可以提取和显示错误信息的一般性错误处理页。