詳解Asp.net web.config customErrors 如何設置
摘要
customErrors也經常在開發(fā)部署中看到<customErrors mode="Off" />,設置這樣可以在頁面上看到詳細的錯誤信息。但也為黑客提供了攻擊的線索。
customErrors
該節(jié)點有三種可選的設置項
- On:服務器開發(fā)的最安全選項,因為它總是隱藏錯誤提示信息。
- RemoteOnly:向大多數(shù)用戶展示一般的錯誤信息,但向擁有服務器訪問權限的用戶展示完整的錯誤提示信息。換句話說,僅向遠程客戶端端顯示自定義錯誤,并向本地主機顯示 ASP.NET 錯誤。默認值。
- Off:最容易受到攻擊的選項,它向訪問網(wǎng)站的每個用戶展示詳細的錯誤提示消息。
詳細的錯誤信息可能會暴露應用程序的內部結構,比如如果寫的sql語句中報錯,可能會暴露數(shù)據(jù)表,以及sql語句,這是非常不安全的。在Off設置下的網(wǎng)站,黑客會不斷的嘗試,傳遞不同的參數(shù),使你的網(wǎng)站出錯,然后暴露你的應用程序的內部結構。
mode=Off
比如:
<system.web> <authentication mode="None" /> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> <customErrors mode="Off" defaultRedirect="error"> </customErrors> </system.web>
在TestAction中直接拋出一個異常,那么我們可以看到與下面類似的黃頁

在黃頁上面可以看到,頁面對應邏輯的堆棧信息,進而暴露項目結構信息。非常的不安全。
那么如果是mode=Off,并且在事件Application_Error中記錄并清除錯誤,會看到什么結果?
protected void Application_Error(object sender, EventArgs e)
{
var context = HttpContext.Current;
if (context != null)
{
Exception objErr = context.Server.GetLastError();
if (objErr != null)
{
string err = "Error Caught in Application_Error event/n" + "Error in:"
+ Request.Url.ToString() + "/nError Message:" + objErr.Message.ToString() +
"/nStack Trace:" + objErr.StackTrace.ToString();
、、、、、日志邏輯
Server.ClearError();
}
}
}
<customErrors mode="Off" defaultRedirect="Error"> </customErrors>
defaultRedirect 指定發(fā)生錯誤時瀏覽器指向的默認 URL。如果沒有指定 defaultRedirect,則會顯示一般性錯誤。URL 既可以是絕對的(例如 http://www.***.com/ErrorPage.htm),也可以是相對的。相對 URL(如 /ErrorPage.htm)是相對于指定 defaultRedirect 的 Web.config 文件而言的,而不是針對產生錯誤的網(wǎng)頁。以波形符 (~) 開頭的 URL(如 ~/ErrorPage.htm)表示所指定的 URL 是相對于應用程序根路徑而言的。
通過上面的操作,如果設置Off,并且在Application_Error事件中捕獲異常,并 Server.ClearError(),那么如果報錯,在前端頁面就會看到空白的頁面。

通過這個也可以說明,如果應用程序出錯,先觸發(fā)的Application_Error事件,ClearError之后,那么在頁面上就看不到結果了。
mode=On
在設置On模式情況下,如果應用程序發(fā)生錯誤,會跳轉到自定義的錯誤頁,這里使用了defaultRedirect屬性,并沒有配置 <error statusCode="500" redirect="error"/>

mode=RemoteOnly
通過字面意思,僅僅遠程,僅僅遠程什么呢?可以看下例子。目前所在編碼環(huán)境,通過vs調試狀態(tài),相對遠程要訪問的用戶,可以將本機當做服務器。那么這就是本地,遠程訪問的瀏覽器就是Remote。

可以看到,在服務器端,訪問仍然能看到黃頁,也就是上面所說的ASP.NET錯誤。那么我們將站點部署在服務器,然后在本地訪問會出現(xiàn)什么情況呢?

通過客戶端訪問服務器的url,則會跳轉到默認的自定義錯誤頁面。那么在服務器端又是什么情況呢?

說明: 僅向遠程客戶端端顯示自定義錯誤,并向本地主機顯示 ASP.NET 錯誤
總結
所以,不要在生產環(huán)境中將customErrors關閉。 推薦開啟RemoteOnly或者On并定義自定義的錯誤頁面。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
asp.net實現(xiàn)訪問局域網(wǎng)共享目錄下文件的解決方法
這篇文章主要介紹了asp.net實現(xiàn)訪問局域網(wǎng)共享目錄下文件的解決方法,需要的朋友可以參考下2014-07-07
asp.net 上傳或下載當文件名包含有特殊字符"#"的處理
在上傳或下載文件時,當文件名包含有"#"特殊字符時,上傳以后的文件會被改名字,造成下載也下載不了。2010-03-03
EF使用數(shù)據(jù)注解特性創(chuàng)建表結構
本文詳細講解了EF使用數(shù)據(jù)注解特性創(chuàng)建表結構的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-03-03
Asp.net之TextBox只允許輸入數(shù)字的方法總結
Asp.net之TextBox只允許輸入數(shù)字的方法總結,需要的朋友可以參考一下2013-02-02
asp.net用Zxing庫實現(xiàn)條形碼輸出的具體實現(xiàn)
這篇文章主要介紹了asp.net用Zxing庫實現(xiàn)條形碼輸出的具體實現(xiàn),有需要的朋友可以參考一下2013-12-12
.net通過Action進行Options參數(shù)的傳遞的方法
在.NET Core中,使用Action和Options參數(shù)方式配置服務并將配置信息對象注冊到IServiceCollection的好處在于,它提供了更高級別的可配置性和可擴展性,這篇文章主要介紹了.net通過Action進行Options參數(shù)的傳遞,你知道是怎么實現(xiàn)的嗎,需要的朋友可以參考下2023-12-12
ASP.NET Core中修改配置文件后自動加載新配置的方法詳解
這篇文章主要給大家介紹了關于ASP.NET Core中修改配置文件后自動加載新配置的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用ASP.NET Core具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2020-08-08
ASP.NET WebForms實現(xiàn)全局異常捕獲與處理的最佳實踐
文章介紹了在ASP.NET WebForms中實現(xiàn)全局異常捕獲與處理的最佳實踐,包括在Global.asax中使用Application_Error、在Web.config中配置customErrors、在代碼中使用try-catch、全局異常過濾以及使用日志記錄庫等方法,感興趣的朋友一起看看吧2025-01-01

