Asp.net 如何在尝试访问.asmx web服务上不存在的web方法时抑制错误消息

Asp.net 如何在尝试访问.asmx web服务上不存在的web方法时抑制错误消息,asp.net,asmx,Asp.net,Asmx,我们有一位客户正在使用HP Web Inspect测试我们软件中的漏洞 web inspect工具抱怨在发出以下请求时返回错误消息http://host/application/WebService.asmx/MethodDoesNotExist Net框架返回一个包含以下文本内容和500状态代码的页面 System.IndexOutOfRangeException: Index was outside the bounds of the array. 仅供参考:如果在web.config中将

我们有一位客户正在使用HP Web Inspect测试我们软件中的漏洞

web inspect工具抱怨在发出以下请求时返回错误消息
http://host/application/WebService.asmx/MethodDoesNotExist

Net框架返回一个包含以下文本内容和500状态代码的页面

System.IndexOutOfRangeException: Index was outside the bounds of the array.
仅供参考:如果在web.config中将自定义错误设置为off,我们也会得到一个堆栈跟踪,如下所示

    System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at System.Web.Services.Protocols.HttpServerType..ctor(Type type)
       at System.Web.Services.Protocols.HttpServerProtocol.Initialize()
       at System.Web.Services.Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response)
       at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)
现在,检查工具将此结果视为安全漏洞,因为页面有500个状态代码(因此服务器已承认发生了错误),并且错误消息看起来可能正在泄漏有关软件内部工作的信息。最佳实践总是显示一条通用的、非特定的错误消息

问题是,我似乎无法控制这个错误消息——它是由框架生成的,应用程序错误代码没有运行

后面的.asmx代码如下所示

    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ScriptService]
    public class FooService 
    {
        [WebMethod(true)]
        [ScriptMethod]
        public string Bar(int fooParam)
        {
            return "Hello";
        }
    }
关于如何阻止生成此消息,您有什么想法吗?
我假设ASP.Net框架正在生成它为简单web服务显示的测试表单-如果是这种情况,是否有任何巫毒可以用来阻止它尝试生成此页面

谢谢

克里斯

额外信息 IIS 6(Windows 2003) ASP.NET3.5

我们尝试在IIS中设置自定义500错误页,但没有效果

web配置如下所示:

   <httpErrors errorMode="Custom">
        <remove statusCode="500" subStatusCode="-1" />
        <error statusCode="500" prefixLanguageFilePath="" path="/application/http500.htm" responseMode="ExecuteURL" />
    </httpErrors>

  <customErrors defaultRedirect="~/ErrorPages/GeneralError.aspx" mode="On">
        <error redirect="500.htm" statusCode="500" />
   </customErrors>


但该错误似乎不是未处理的错误,因此不会显示500页。

如果您部署在IIS 7服务器上并使用集成管道模式,则可以在应用程序中处理错误:


但是,如果其中任何一个都不正确,则必须为500错误设置自定义错误页。

谢谢您的回复。该客户正在使用IIS,我们尝试设置自定义的500错误页,但没有效果-这同样让我感到惊讶和失望。@Chris F:是在应用程序级别(web.config)设置的还是通过IIS管理器设置的?恭喜!您找到了升级到WCF的另一个很好的理由。ASMX不支持您的方案。此外,我不同意您的“安全专家”观点。这是一个网络服务。任何它没有实现的操作,它——出乎意料——都没有实现。是的,如果有一个“出了问题,我不会告诉你它是什么”的返回可能会更好,但这是很小的,因为“索引超出范围”并没有说明你的代码。@John Saunders:我愿意成为安全人员提出这个问题的原因,因为它本质上是一个未经处理的错误。这是否可利用有待讨论。@Chris:这不是一个未经处理的错误。你的服务永远不会被呼叫。正如预期的那样,是基础设施返回了错误。