如何获取友好的错误页面来替换 URL“WEB-INF./web.xml”的 asp.net 错误页面?

如何获取友好的错误页面来替换 URL“WEB-INF./web.xml”的 asp.net 错误页面?

此 URL 是 pci 合规性扫描的一部分,它标记了返回的非常稀疏的 asp.net 错误页面,在实时站点上为 500 状态代码和文本

‘/’应用程序中的服务器错误。

运行时错误

描述:处理您的请求时发生异常。此外,执行第一个异常的自定义错误页面时发生另一个异常。请求已终止。

然而,当我在 Visual Studio 中运行该网站时,出现 404 错误,并且文本

‘/’应用程序中的服务器错误。

无法找到该资源。

描述:HTTP 404。您正在寻找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请检查以下 URL 并确保其拼写正确。

请求的 URL:/WEB-INF./web.xml

版本信息:Microsoft .NET Framework 版本:4.0.30319;ASP.NET 版本:4.0.30319.18044

我尝试在路由中忽略该 URL 并将其映射到我们的 404 路由/error/not-found,我们打开了自定义错误,并默认重定向到/error/internal。我还尝试使用位置标记来拒绝访问,使用请求过滤阻止它,并使用具有该路径的处理程序来捕获请求。

我尝试了此重写,也尝试了相同的规则阻止和重定向,但我仍然得到相同的 asp.net 错误页面。图像被截断,但规则是^.*\./.*$,并且它确实与我尝试过滤的 URL 匹配(我也尝试过简单WEB-INF)。

重写规则

知道如何获取此 URL 来显示我们的自定义错误页面吗?

答案1

relaxedUrlToFileSystemMapping="true"在 web.config 中添加httpRuntime 节点允许该 url 按预期被 ASP.Net MVC 处理。

<system.web>
  <httpRuntime relaxedUrlToFileSystemMapping="true" />
</system.web>

答案2

在 IIS 中,默认情况下详细的错误消息会显示给本地客户端,这就是为什么您可以通过 Visual Studio 看到这些消息,但在远程收到 500 错误的原因。

要进行更改,请在 IIS 管理器中单击受影响的站点,在功能视图中单击“错误页面”,然后在右侧窗格中选择“编辑功能设置”。然后,您将能够选择“自定义错误页面”并以此方式进行配置。

编辑:Tomcat 也存在一个漏洞:

<servlet-mapping> 
<servlet-name>FileServlet</servlet-name> 
<url-pattern>/</url-pattern> 
</servlet-mapping> 

在您的 web.xml 文件中找到它并将其注释掉。这将阻止某人访问 /WEB-INF./ 并访问您的文件。请注意,/WEB-INF/ 应该抛出适当的 404。

相关内容