2012-02-21 72 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