在使用C#建立”.NET Framework”網站專案時,預設的錯誤頁面會顯示編譯器提供的錯誤訊息,使開發者能夠輕鬆地查詢問題並讓客戶方便回報問題給開發者進行修正。儘管這樣的設計初衷是良好的,但考慮到近年來網路攻擊日益頻繁,弱點掃描將顯示預設錯誤頁面列為高風險事項。這是因為預設錯誤頁面可能會將敏感的錯誤訊息暴露給用戶,進而讓攻擊者發現網站的弱點並進一步進行攻擊。因此,我們需要使用自訂的錯誤頁面,以隱藏實際的錯誤訊息,並提供更安全的使用體驗。
實作
-
- 在Web.config內的<system.web>內新增一行<customErrors mode=”On” defaultRedirect=”~/Home/Error”>
- 這個部分如果原本有的話應該是mode=”Off”,把其改成”On”就好,這個部分要注意的是On跟Off除了第一個字母大寫,其他都必須小寫才能正常運作,另外除了這兩個選項之外還有一個RemoteOnly,是讓本地運行時還是可以看到錯誤訊息,但我自己開發上的習慣還是建議改成”On”,要查錯誤還是要靠寫程式養成好習慣多寫log來排查問題。
- defaultRedirect代表要導向到的頁面,以.NET Framework專案來說的話是放在view/Home資料夾下的Error.cshtml檔
- Error.cshtml可以寫一些常見的內容,例如直接顯示http狀態碼(404,500)或是直接提示發生意料之外的錯誤等等的方式都可以
- Global.asax內新增
- 在Web.config內的<system.web>內新增一行<customErrors mode=”On” defaultRedirect=”~/Home/Error”>
void Application_Start(object sender, EventArgs e)
{
GlobalFilters.Filters.Add(new HandleErrorAttribute
{
View = "Error"
});
}
如果原本就存在 Application_Start 只要把內容添加進去即可,代表處理錯誤時我們要把介面導向到Error.cshtml這個View。
補充
自訂頁面在使用vs使用debug模式運行時是不會顯示出自訂錯誤頁面的,一定要部屬到IIS上才能看到自訂錯誤頁面,同時也要注意IIS的設定內有沒有預設導向的錯誤頁面,如果有的話一定要記得移除,不然會以IIS內設定的錯誤導向頁面為優先。
結論
本文深入探討了在使用C#建立.NET Framework網站專案時的錯誤處理機制,特別聚焦於如何自訂錯誤頁面以提高安全性和使用者體驗。雖然Microsoft的官方文件提供了相關設定的基本指導,但往往並不足以滿足開發者的具體需求,而不同的框架設定方式也存在差異,這正是本文撰寫的動機所在。
通過對Web.config和Global.asax檔案的設定,我們可以有效地將預設錯誤頁面轉換為自訂錯誤頁面,從而隱藏敏感訊息並提供更安全的使用體驗。作者在實作部分提供了詳細的程式碼示例和注意事項,例如Web.config中的<customErrors>節點設定和Global.asax中的全域錯誤處理機制設定,以及對IIS部署時的相關注意事項。
儘管Microsoft的官方文件提供了一般性的指導,但本文從開發者的角度出發,更加詳細地解釋了實際的設定步驟和注意事項,以幫助開發者更好地理解和應用錯誤處理機制。
在不斷演進的網路環境中,網站安全性是一個持續關注的議題。通過學習和應用本文提供的技術,開發者能夠建立更加安全可靠的.NET Framework網站,為用戶提供穩定、安全的網路體驗,同時提高系統的可靠性和防禦能力。
因此,本文的目的在於填補Microsoft官方文件的不足,並從開發者的角度提供實用的技術指導,以應對不斷變化的網路攻擊和安全挑戰。