2010-07-06 89 views
0

我一直在閱讀基於ASP.NET的網站應該在web.config中啓用自定義錯誤,因爲異常會顯示堆棧跟蹤。ASP.NET自定義錯誤與編譯debug =「false」和安全

我可能有錯誤的內存(目前無法訪問正在開發的ASP.NET網站),但我認爲只要在web.config文件中編譯debug =「false」,那麼堆棧跟蹤將不會顯示。

我的理解是否正確,關於調試標誌和顯示堆棧跟蹤?如果是這樣,那麼即使未啓用自定義錯誤,那麼對於異常顯示給遠程用戶的唯一消息也不會是非描述性消息:

「頁面無法顯示,因爲內部服務器錯誤發生。」

如果是這樣,那麼從安全角度來看,它不會是好的,不會顯示異常的自定義錯誤頁面?

+0

你是不是指「客戶」錯誤的「自定義」錯誤? – 2010-07-06 23:46:16

+0

是的,我糾正了這個錯字。希望我修復所有實例。 – harrije 2010-07-06 23:51:17

+0

我修復了你的標題。 – 2010-07-06 23:52:10

回答

1

不,即使調試標誌關閉,堆棧跟蹤仍會顯示,但堆棧中每個調用都沒有行號。

非描述性消息是瀏覽器通常顯示的內容,而不是來自服務器的實際錯誤消息,除非更改配置。任何想通過引發錯誤信息來公開信息的人都知道如何做到這一點。

顯示堆棧跟蹤本身並不是一個安全風險,但它確實暴露了一些信息,可能會更容易破解該站點。例如,黑客可能會弄清楚爲了清潔輸入並找到解決辦法所做的工作。

+0

然後使用一個全局自定義錯誤頁面,在最佳實踐方面會有所改進,而且沒有自定義錯誤頁面,對嗎? – harrije 2010-07-06 23:35:59

+0

@harrije:是的,它可以防止錯誤信息泄露,併爲碰巧遇到錯誤信息的用戶提供更好的體驗。 – Guffa 2010-07-07 00:40:55

0

自定義錯誤消息幾乎總是優先於拋出的默認錯誤。它優雅地將用戶發送到他們可以繼續瀏覽您的網站的位置,而無需返回並重試。

在您的web中關閉DEBUGGING .Config非常重要,不僅僅是不顯示行號和堆棧跟蹤......它還告訴編譯器構建在可顯着優化性能的發佈模式中。只要您的應用程序投入生產,應該禁用所有調試。