C# 使用.net异常作为WCF故障契约是否存在安全风险?

C# 使用.net异常作为WCF故障契约是否存在安全风险?,c#,.net,wcf,security,fault,C#,.net,Wcf,Security,Fault,在处理WCF故障契约时,我希望可以将自定义异常继承树重用为故障中的TDetail。在完成这项工作后,我开始仔细思考(是的,在完成工作后,你知道这是思考的最佳时机)。我注意到客户机获得了序列化为TDetail的异常的完整stacktrace 现在我想这正是你不打开的原因。但我不确定。使用我的异常作为TDetail是否会有安全风险?我的其他选择是什么?公开堆栈跟踪并没有那么大的安全risc,但可能会为atacker提供有关系统的更多信息(数据库、libs等)。因此,在我看来,您应该在生产环境中打开的

在处理WCF故障契约时,我希望可以将自定义异常继承树重用为故障中的TDetail。在完成这项工作后,我开始仔细思考(是的,在完成工作后,你知道这是思考的最佳时机)。我注意到客户机获得了序列化为TDetail的异常的完整stacktrace


现在我想这正是你不打开
的原因。但我不确定。使用我的异常作为TDetail是否会有安全风险?我的其他选择是什么?

公开堆栈跟踪并没有那么大的安全risc,但可能会为atacker提供有关系统的更多信息(数据库、libs等)。因此,在我看来,您应该在生产环境中打开的详细信息,但它们在调试时非常有帮助。

如前所述,这可能是一种安全风险,因为它会向外部世界透露有关内部系统的更多信息。但是,TDetail可以是任何内容,因此您可以创建新的异常选项,以保留您希望保留的消息和有趣的异常信息,但清除堆栈跟踪之类的安全数据,然后将您批准的部分序列化给客户端。

取决于您的服务使用者。如果假设您正在向外部世界开放,那么将这些细节传递给服务的客户端将不是一个好主意,因为这会让服务的消费者了解可能导致安全漏洞的事情。但是如果你在内部使用它,并且管理良好,你想让他们知道如何利用这些细节做一些事情,那么这是你的决定,因为说到底,它可能位于一个防火墙后面,不对外开放,并且在一个由管理员控制的网络上进行即时消息猜测。

我曾经尝试过在自定义异常上使用DataContracts来实现这一点,但结果证明,不能以这种方式混合DataContracts和ISerializable对象。因此,为了实现这一点,我应该重新实现自定义异常的
ISerializable.GetObjectData
方法,或者实现等效的FaultContract。考虑到我喜欢我的Intellisense(在实现GetObjectData时你不会得到),我喜欢WCF工具对数据契约的神奇支持,我选择了后者。感谢你指出了安全风险的具体内容。我不信任我的内部用户;-)(是的,我有妄想症)。认真地说;当一家公司接触到一定数量的员工时,我不再将我的用户视为“内部用户”,我并不完全了解他们……是的,但你显然不理解我说的话。如果他们是内部的,他们会在防火墙后面,系统会被监控,用户会被知道,就像我说的,你想处理你提供给en用户的响应吗?因为他们是内部的,你可能也会在客户端编程。这将是一个管理良好、控制良好的环境,如果您想根据您的异常情况在客户端做任何事情,那么它将是一个管理良好的环境。