【问题标题】:How to disable Verbose Error Messages of soap web services?如何禁用肥皂网络服务的详细错误消息?
【发布时间】:2021-04-27 01:50:44
【问题描述】:

如何禁用soap web服务的详细错误消息?

我有一个带有一些段落的网络方法。

请求示例:

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
    <Body>
        <GenerateTestRequest xmlns="http://tempuri.org/">
            <sId>1@!aB</sId>
            <mobileNum>12345678</mobileNum>
            <srcType>1</srcType>
        </GenerateTestRequest>
    </Body>
</Envelope>
    

当向sId para 而不是 Int32 提供意外输入时,Web 服务在响应内容中返回异常。

示例资源:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <s:Fault>
            <faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:DeserializationFailed</faultcode>
            <faultstring xml:lang="en-SG">The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://tempuri.org/:sId. The InnerException message was 'There was an error deserializing the object of type System.Int32. The value '1@!aB' cannot be parsed as the type 'Int32'.'.  Please see InnerException for more details.</faultstring>
        </s:Fault>
    </s:Body>
</s:Envelope>

我不想显示异常消息的响应内容。有什么方法可以关闭堆栈跟踪或异常详细信息?

【问题讨论】:

  • 你可以试试IIS中的errorpage组件,把右边的Edit特性设置改成第一个选项。
  • @TheobaldDu 谢谢你的建议。我按照您的建议尝试了,但仍然得到相同的结果。

标签: web-services iis soap owasp


【解决方案1】:

有没有办法关闭堆栈跟踪或异常详细信息?

是的,通过对 SOAP Web 服务进行适当的错误处理。

SOAP 请求可以接收成功的 SOAP 响应,也可以接收 SOAP 错误形式的不成功响应。不幸的是,人们只关注成功的案例,而让他们使用的框架处理其他问题。

因为 SOAP 是一种协议,所以服务器上的任何异常都需要转换为正确的故障响应。这需要开发人员通过捕获任何异常并从中构建适当的故障响应来完成,其中仅包含所需的数据。当然,出于安全原因,数据不能包含堆栈跟踪或其他敏感信息。但是就像我说的,人们经常忽略处理错误情况,并且框架无法构建自定义故障,它只能构建一个带有发生异常的详细信息的 SOAP 故障,并将其暴露给客户端。

您没有标记此WCF,但错误代码上的模式命名空间显示windowscommunicationfoundation,所以我假设这是Web 服务框架。您可以通过将IncludeExceptionDetailInFaults 设置为 false 来将所有异常消息替换为通用错误消息(我认为对于您的服务,它现在设置为 true)。详情见这里:either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server

或者,您可以进行适当的错误处理,定义和记录客户端可以接收的可能故障,并将任何异常转换为这些故障之一。你可以从这里开始阅读:Specifying and Handling Faults in Contracts and Services

如果您使用任何其他 Web 服务框架或库,想法是相同的,阅读的文档会有所不同。

【讨论】:

  • 感谢@Bogdan 的有用回答。是的,我忘了添加wcf 标签。通过将 IncludeExceptionDetailInFaults 设置为 false 来关闭堆栈跟踪。但我认为我仍然需要进行自定义错误处理。再次感谢您提供错误处理链接。
  • 我通过将 IncludeExceptionDetailInFaults 设置为 false 来禁用堆栈跟踪信息来获得它。但是,仍然会显示简短的错误消息。问题是,如果我将错误的输入类型输入到 web 方法,它甚至不会命中 web 方法。在这种情况下,我该如何编写自定义错误处理程序?或者有什么办法也可以禁用故障异常短信?提前致谢。
  • 您必须意识到每个 API 都有错误和异常,SOAP Web 服务也不例外。在某些时候,您的客户端会遇到来自您的服务的 SOAP 故障。这个想法是进行适当的错误处理并创建您自己的故障合同(如我的答案中显示的链接 - 您必须遵循该文档或其他有关故障合同的教程)。当您定义自己的故障契约时,您可以显示您希望客户端查看的任何错误代码和错误消息,而不是来自框架的通用代码和堆栈跟踪。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 2017-01-16
  • 2017-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多