文章主要介紹了詳解Asp.net web.config customErrors 如何設(shè)置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
摘要
customErrors也經(jīng)常在開發(fā)部署中看到
customErrors
該節(jié)點(diǎn)有三種可選的設(shè)置項(xiàng)
On:服務(wù)器開發(fā)的最安全選項(xiàng),因?yàn)樗偸请[藏錯誤提示信息。
RemoteOnly:向大多數(shù)用戶展示一般的錯誤信息,但向擁有服務(wù)器訪問權(quán)限的用戶展示完整的錯誤提示信息。換句話說,僅向遠(yuǎn)程客戶端端顯示自定義錯誤,并向本地主機(jī)顯示 ASP.NET 錯誤。默認(rèn)值。
Off:最容易受到攻擊的選項(xiàng),它向訪問網(wǎng)站的每個用戶展示詳細(xì)的錯誤提示消息。
詳細(xì)的錯誤信息可能會暴露應(yīng)用程序的內(nèi)部結(jié)構(gòu),比如如果寫的sql語句中報錯,可能會暴露數(shù)據(jù)表,以及sql語句,這是非常不安全的。在Off設(shè)置下的網(wǎng)站,黑客會不斷的嘗試,傳遞不同的參數(shù),使你的網(wǎng)站出錯,然后暴露你的應(yīng)用程序的內(nèi)部結(jié)構(gòu)。
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中直接拋出一個異常,那么我們可以看到與下面類似的黃頁
在黃頁上面可以看到,頁面對應(yīng)邏輯的堆棧信息,進(jìn)而暴露項(xiàng)目結(jié)構(gòu)信息。非常的不安全。
那么如果是mode=Off,并且在事件Application_Error中記錄并清除錯誤,會看到什么結(jié)果??
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ā)生錯誤時瀏覽器指向的默認(rèn) URL。如果沒有指定 defaultRedirect,則會顯示一般性錯誤。URL 既可以是絕對的(例如 http://www.***.com/ErrorPage.htm),也可以是相對的。相對 URL(如 /ErrorPage.htm)是相對于指定 defaultRedirect 的 Web.config 文件而言的,而不是針對產(chǎn)生錯誤的網(wǎng)頁。以波形符 (~) 開頭的 URL(如 ~/ErrorPage.htm)表示所指定的 URL 是相對于應(yīng)用程序根路徑而言的。
通過上面的操作,如果設(shè)置Off,并且在Application_Error事件中捕獲異常,并Server.ClearError(),那么如果報錯,在前端頁面就會看到空白的頁面。
通過這個也可以說明,如果應(yīng)用程序出錯,先觸發(fā)的Application_Error事件,ClearError之后,那么在頁面上就看不到結(jié)果了。
mode=On
在設(shè)置On模式情況下,如果應(yīng)用程序發(fā)生錯誤,會跳轉(zhuǎn)到自定義的錯誤頁,這里使用了defaultRedirect屬性,并沒有配置
mode=RemoteOnly
通過字面意思,僅僅遠(yuǎn)程,僅僅遠(yuǎn)程什么呢?可以看下例子。目前所在編碼環(huán)境,通過vs調(diào)試狀態(tài),相對遠(yuǎn)程要訪問的用戶,可以將本機(jī)當(dāng)做服務(wù)器。那么這就是本地,遠(yuǎn)程訪問的瀏覽器就是Remote。
可以看到,在服務(wù)器端,訪問仍然能看到黃頁,也就是上面所說的ASP.NET錯誤。那么我們將站點(diǎn)部署在服務(wù)器,然后在本地訪問會出現(xiàn)什么情況呢?
通過客戶端訪問服務(wù)器的url,則會跳轉(zhuǎn)到默認(rèn)的自定義錯誤頁面。那么在服務(wù)器端又是什么情況呢?
說明: 僅向遠(yuǎn)程客戶端端顯示自定義錯誤,并向本地主機(jī)顯示 ASP.NET 錯誤
總結(jié)
所以,不要在生產(chǎn)環(huán)境中將customErrors關(guān)閉。 推薦開啟RemoteOnly或者On并定義自定義的錯誤頁面。
以上就是Asp.net web.config customErrors 如何設(shè)置的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。