Asp.net web.config customErrors設定詳解

發表於2019-01-15

  文章主要介紹了詳解Asp.net web.config customErrors 如何設定,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

摘要

  customErrors也經常在開發部署中看到,設定這樣可以在頁面上看到詳細的錯誤資訊。但也為駭客提供了攻擊的線索。

customErrors

  該節點有三種可選的設定項

  On:伺服器開發的最安全選項,因為它總是隱藏錯誤提示資訊。

  RemoteOnly:向大多數使用者展示一般的錯誤資訊,但向擁有伺服器訪問許可權的使用者展示完整的錯誤提示資訊。換句話說,僅向遠端客戶端端顯示自定義錯誤,並向本地主機顯示 ASP.NET 錯誤。預設值。

  Off:最容易受到攻擊的選項,它向訪問網站的每個使用者展示詳細的錯誤提示訊息。

  詳細的錯誤資訊可能會暴露應用程式的內部結構,比如如果寫的sql語句中報錯,可能會暴露資料表,以及sql語句,這是非常不安全的。在Off設定下的網站,駭客會不斷的嘗試,傳遞不同的引數,使你的網站出錯,然後暴露你的應用程式的內部結構。

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 指定發生錯誤時瀏覽器指向的預設 URL。如果沒有指定 defaultRedirect,則會顯示一般性錯誤。URL 既可以是絕對的(例如 http://www.***.com/ErrorPage.htm),也可以是相對的。相對 URL(如 /ErrorPage.htm)是相對於指定 defaultRedirect 的 Web.config 檔案而言的,而不是針對產生錯誤的網頁。以波形符 (~) 開頭的 URL(如 ~/ErrorPage.htm)表示所指定的 URL 是相對於應用程式根路徑而言的。

  透過上面的操作,如果設定Off,並且在Application_Error事件中捕獲異常,並Server.ClearError(),那麼如果報錯,在前端頁面就會看到空白的頁面。

  透過這個也可以說明,如果應用程式出錯,先觸發的Application_Error事件,ClearError之後,那麼在頁面上就看不到結果了。

mode=On

  在設定On模式情況下,如果應用程式發生錯誤,會跳轉到自定義的錯誤頁,這裡使用了defaultRedirect屬性,並沒有配置

mode=RemoteOnly

  透過字面意思,僅僅遠端,僅僅遠端什麼呢?可以看下例子。目前所在編碼環境,透過vs除錯狀態,相對遠端要訪問的使用者,可以將本機當做伺服器。那麼這就是本地,遠端訪問的瀏覽器就是Remote。

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

  透過客戶端訪問伺服器的url,則會跳轉到預設的自定義錯誤頁面。那麼在伺服器端又是什麼情況呢?

  說明: 僅向遠端客戶端端顯示自定義錯誤,並向本地主機顯示 ASP.NET 錯誤

總結

  所以,不要在生產環境中將customErrors關閉。 推薦開啟RemoteOnly或者On並定義自定義的錯誤頁面。

  以上就是Asp.net web.config customErrors 如何設定的全部內容,希望對大家的學習有所幫助。

相關文章