2012-02-21 67 views
1

在摆弄WCF错误契约时,我希望能够在我的故障中重用我的自定义Exception继承树作为TDetail。在开始工作之后,我开始思考这个问题(是的,在完成工作之后,你知道这是思考的最佳时机)。我注意到客户端获取了序列化为TDetail的异常的完整堆栈跟踪。正在使用.net异常作为WCF故障合同存在安全风险?

现在我在想这就是你不打开<servicedebug includeExceptionDetailInFaults="true" />的确切原因。但我不确定。作为TDetail使用我的例外是否会对我造成安全风险?我的其他选择是什么?

回答

1

如前所述,它可能是一个安全风险,因为它会向外界揭示更多关于内部系统的信息。但是,TDetail可以是任何东西,因此您可以创建新的异常选项,以保留您想要保留的消息和有趣的异常信息,但会清除堆栈跟踪等安全数据,然后仅序列化您批准给客户端的那些部分。

+0

我已经尝试在我的自定义异常上使用DataContracts来做这件事,但事实证明,您不能以这种方式混合DataContracts和ISerializable对象。所以为了实现这个,我应该重新实现自定义异常的ISerializable.GetObjectData方法,或者实现等价的FaultContracts。鉴于我喜欢我的Intellisense(在实现GetObjectData时没有获得),并且我喜欢对DataContracts的WCF工具的神奇支持,所以我使用后者。 – dvdvorle 2012-02-21 08:18:10

1

暴露堆栈跟踪并不是那么大的安全risc,但潜在性可以让系统(数据库,库等)有更多的信息。所以在我看来,你应该在生产环境中转变细节,但是在调试时它们是非常有帮助的。

+0

感谢您指出确切的安全风险。 – dvdvorle 2012-02-21 08:19:23

0

取决于谁是您服务的消费者。如果让我们说你打开了它的外部世界,将这些细节传递给服务的客户并不是一个好主意,因为它给服务的消费者一个关于可能导致安全漏洞的事情的想法。但是如果你可以说在内部使用它并且管理得很好,并且你希望它们能够如何用这些细节做一些事情,那么它的你的呼叫,在一天结束时它可能在防火墙后面打开外面的世界和网络由管理员进行控制我猜。

+0

我不相信我的内部用户;-)(是的,我是偏执狂)。尽管如此,当一家公司达到一定数量的员工时,我停止将我的用户视为“内部”,我不知道他们都是...... – dvdvorle 2012-02-21 08:23:17

+3

是的,但你显然不明白我说的是什么。如果他们是内部的,他们会有一些如何在防火墙后面,系统会被监控,用户会被了解,并且像我也曾说过的那样,您是否想要处理您为其提供给用户的响应一些如何,因为他们是内部的,你可能也会编程客户端的东西。这将是一个管理良好的受控环境,也就是说,如果您想根据您的FaultExceptions在客户端做任何事情。 – 2012-02-23 11:46:22