背景
项目现按照国网的要求,测试后发现系统错误页面存在服务器版本号泄露,不允许部署安装
分析暴露原因
查看请求找到如下解释:
此错误页可能包含敏感信息,因为 ASP.NET 通过 <customErrors mode=“Off”/> 被配置为显示详细错误消息。请考虑在生产环境中使用 <customErrors mode=“On”/> 或 <customErrors mode=“RemoteOnly”/>
解决办法
遂找到项目使用的Web.Config
中<customErrors>
中的mode=off删除。于是问题解决。
<configuration>
<system.web>
<customErrors>
<customErrors defaultRedirect="ErrorReport.aspx">
<error statusCode="statuscode" redirect="url"/>
</customErrors>
...
扩展学习customErrors使用方法
customErrors元素配置结构
元素 | 描述 | 备注 |
---|---|---|
<customErrors> | 提供有关ASP.NET 应用程序自定义错误消息的信息。 | 不适用于在 XML Web 服务中出现的错误。 |
在Web.Config配置文件中,customErrors元素配置结构的示例:
<configuration>
<system.web>
<customErrors>
<customErrors defaultRedirect="ErrorReport.aspx" mode="On|Off|RemoteOnly">
<error statusCode="statuscode" redirect="url"/>
</customErrors>
...
元素属性
属性 | 描述 |
---|---|
Mode | 指定启用、禁用或仅对远程客户端显示自定义错误。 |
defaultRedirect (可选) | 指定发生错误时浏览器指向的默认 URL。如果没有指定 defaultRedirect,则会显示一般性错误。URL 既可以是绝对的(例如 http://www.***.com/ErrorPage.htm),也可以是相对的。相对 URL(如 /ErrorPage.htm)是相对于指定 defaultRedirect 的 Web.config 文件而言的,而不是针对产生错误的网页。以波形符 (~) 开头的 URL(如 ~/ErrorPage.htm)表示所指定的 URL 是相对于应用程序根路径而言的。 |
Mod 属性选项
Mod 选项 | 描述 |
---|---|
RemoteOnly | 指定仅向远程客户端端显示自定义错误,并向本地主机显示 ASP.NET 错误。这是默认值。 |
On | 指定启用自定义错误。如果没有指定 defaultRedirect,用户将看到一般性错误。 |
Off | 指定禁用自定义错误。这允许显示详细的错误。 |
服务器上出现应用程序错误。此应用程序的当前自定义错误设置禁止查看应用程序错误的详细信息。
子元素 | 描述 |
---|---|
<error> | 错误子标记可以出现多次。每出现一次便定义了一个自定义错误条件。 |
示例
下例指定了 ASP.NET 应用程序的错误处理页。
<configuration>
<system.web>
<customErrors defaultRedirect="GenericError.htm" mode="RemoteOnly">
<error statusCode="500" redirect="InternalError.htm"/>
</customErrors>
</system.web>
</configuration>
说明:
服务器上出现应用程序错误。此应用程序的当前自定义错误设置禁止查看应用程序错误的详细信息。
若要使他人能够从本地服务器计算机上查看此特定错误信息的详细信息,请在位于当前 Web 应用程序根目录下的“web.config”配置文件中创建一个<customErrors>
标记。然后应将此<customErrors>
标记的“mode”属性设置为“RemoteOnly”。若要使他人能够在远程计算机上查看详细信息,请将“mode”设置为“Off”。
通过修改应用程序的 配置标记的“defaultRedirect”属性,使之指向自定义错误页的 URL,可以用自定义错误页替换所看到的当前错误页。
参考文章
Web.Config配置文件中customErrors元素的使用方法
关于Web.Config中的mode属性问题
IIS Web.Config中customErrors的使用方法(mode=On|Off|RemoteOnly)