詳解Asp.net web.config customErrors 如何設(shè)置
摘要
customErrors也經(jīng)常在開(kāi)發(fā)部署中看到<customErrors mode="Off" />,設(shè)置這樣可以在頁(yè)面上看到詳細(xì)的錯(cuò)誤信息。但也為黑客提供了攻擊的線索。
customErrors
該節(jié)點(diǎn)有三種可選的設(shè)置項(xiàng)
- On:服務(wù)器開(kāi)發(fā)的最安全選項(xiàng),因?yàn)樗偸请[藏錯(cuò)誤提示信息。
- RemoteOnly:向大多數(shù)用戶展示一般的錯(cuò)誤信息,但向擁有服務(wù)器訪問(wèn)權(quán)限的用戶展示完整的錯(cuò)誤提示信息。換句話說(shuō),僅向遠(yuǎn)程客戶端端顯示自定義錯(cuò)誤,并向本地主機(jī)顯示 ASP.NET 錯(cuò)誤。默認(rèn)值。
- Off:最容易受到攻擊的選項(xiàng),它向訪問(wèn)網(wǎng)站的每個(gè)用戶展示詳細(xì)的錯(cuò)誤提示消息。
詳細(xì)的錯(cuò)誤信息可能會(huì)暴露應(yīng)用程序的內(nèi)部結(jié)構(gòu),比如如果寫(xiě)的sql語(yǔ)句中報(bào)錯(cuò),可能會(huì)暴露數(shù)據(jù)表,以及sql語(yǔ)句,這是非常不安全的。在Off設(shè)置下的網(wǎng)站,黑客會(huì)不斷的嘗試,傳遞不同的參數(shù),使你的網(wǎng)站出錯(cuò),然后暴露你的應(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中直接拋出一個(gè)異常,那么我們可以看到與下面類似的黃頁(yè)

在黃頁(yè)上面可以看到,頁(yè)面對(duì)應(yīng)邏輯的堆棧信息,進(jìn)而暴露項(xiàng)目結(jié)構(gòu)信息。非常的不安全。
那么如果是mode=Off,并且在事件Application_Error中記錄并清除錯(cuò)誤,會(huì)看到什么結(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ā)生錯(cuò)誤時(shí)瀏覽器指向的默認(rèn) URL。如果沒(méi)有指定 defaultRedirect,則會(huì)顯示一般性錯(cuò)誤。URL 既可以是絕對(duì)的(例如 http://www.***.com/ErrorPage.htm),也可以是相對(duì)的。相對(duì) URL(如 /ErrorPage.htm)是相對(duì)于指定 defaultRedirect 的 Web.config 文件而言的,而不是針對(duì)產(chǎn)生錯(cuò)誤的網(wǎng)頁(yè)。以波形符 (~) 開(kāi)頭的 URL(如 ~/ErrorPage.htm)表示所指定的 URL 是相對(duì)于應(yīng)用程序根路徑而言的。
通過(guò)上面的操作,如果設(shè)置Off,并且在Application_Error事件中捕獲異常,并 Server.ClearError(),那么如果報(bào)錯(cuò),在前端頁(yè)面就會(huì)看到空白的頁(yè)面。

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

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

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

通過(guò)客戶端訪問(wèn)服務(wù)器的url,則會(huì)跳轉(zhuǎn)到默認(rèn)的自定義錯(cuò)誤頁(yè)面。那么在服務(wù)器端又是什么情況呢?

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

