在摆弄 WCF 故障契约时,我希望我可以在我的故障中重用我的自定义异常继承树作为 TDetail。在完成这项工作后,我开始思考这个问题(是的,在完成工作之后,你知道这是思考的最佳时机)。我注意到客户端获得了序列化为 TDetail 的异常的完整堆栈跟踪。
现在我在想这就是你不打开的确切原因<servicedebug includeExceptionDetailInFaults="true" />
。但我不确定。将我的异常用作 TDetail 会对我造成安全风险吗?我还有什么其他选择?
公开堆栈跟踪并不是那么大的安全风险,但可能会给攻击者提供有关您的系统(数据库、库等)的更多信息。所以在我看来,你应该在生产环境中打开细节,但它们在调试时很有帮助。
如前所述,这可能是一种安全风险,因为它会向外界透露更多有关您的内部系统的信息。但是,TDetail 可以是任何东西,因此您可以创建新的异常选项来保留您想要保留的消息和有趣的异常信息,但会清除堆栈跟踪等安全数据,然后仅将您批准的那些部分序列化给客户端。
取决于谁是您的服务的消费者。如果假设您正在向外部世界开放它,那么将这些详细信息传递给服务的客户并不是一个好主意,因为它让服务的消费者了解可能导致安全漏洞的事情。但是,如果您可以说在内部使用它并且管理得当,并且您希望他们能够对这些细节做一些事情,那么这是您的电话,因为最终它可能在防火墙后面,不向我猜是外部世界和由管理员控制的网络上。