【ASP】如何利用GetLastError函數(shù)捕捉WEB頁(yè)面上的500.100錯(cuò)誤位置和詳細(xì)信息
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
:【ASP】如何利用GetLastError函數(shù)捕捉WEB頁(yè)面上的500.100錯(cuò)誤位置和詳細(xì)信息 我試圖診斷一個(gè)網(wǎng)站的問(wèn)題,似乎是在代碼的地方拋出一個(gè)錯(cuò)誤。從錯(cuò)誤日志看來(lái),它是一個(gè)SQL語(yǔ)法錯(cuò)誤,由錯(cuò)誤的SQL代碼錯(cuò)誤串聯(lián)導(dǎo)致。我的問(wèn)題是,我無(wú)法重現(xiàn)錯(cuò)誤,但客戶(hù)仍然可以得到它,這可能是由許多查詢(xún)?cè)斐傻?。所以我的?jì)劃是創(chuàng)建我自己的500錯(cuò)誤頁(yè)面來(lái)捕捉結(jié)果。我想讓頁(yè)面捕獲所有會(huì)話數(shù)據(jù),所有POST和GET數(shù)據(jù)(我可以這樣做),但我也想捕獲關(guān)于錯(cuò)誤的詳細(xì)信息。當(dāng)網(wǎng)站允許顯示錯(cuò)誤時(shí),幾乎會(huì)在頁(yè)面上顯示的內(nèi)容。用小箭頭指定該行。 有沒(méi)有辦法從自定義錯(cuò)誤頁(yè)面中捕獲錯(cuò)誤? 參考微軟公司官網(wǎng)頁(yè)面:define a custom 500 error code page,中文頁(yè)面:http://21420.oa22.cn,當(dāng)你的程序崩潰時(shí)可以給你更多的信息。以下是一些示例代碼,它們會(huì)針對(duì)您的錯(cuò)誤構(gòu)建詳細(xì)的錯(cuò)誤消息說(shuō)明。 Set objASPError = Server.GetLastError Dim strProblem strProblem = "ASPCode: " & Server.HTMLEncode(objASPError.ASPCode) & vbCrLf strProblem = strProblem & "Number: 0x" & Hex(objASPError.Number) & vbCrLf strProblem = strProblem & "Source: [" & Server.HTMLEncode(objASPError.Source) & "]" & vbCrLf strProblem = strProblem & "Category: " & Server.HTMLEncode(objASPError.Category) & vbCrLf strProblem = strProblem & "File: " & Server.HTMLEncode(objASPError.File) & vbCrLf strProblem = strProblem & "Line: " & CStr(objASPError.Line) & vbCrLf strProblem = strProblem & "Column: " & CStr(objASPError.Column) & vbCrLf strProblem = strProblem & "Description: " & Server.HTMLEncode(objASPError.Description) & vbCrLf strProblem = strProblem & "ASP Description: " & Server.HTMLEncode(objASPError.ASPDescription) & vbCrLf strProblem = strProblem & "Server Variables: " & vbCrLf & Server.HTMLEncode(Request.ServerVariables("ALL_HTTP")) & vbCrLf strProblem = strProblem & "QueryString: " & Server.HTMLEncode(Request.QueryString) & vbCrLf strProblem = strProblem & "URL: " & Server.HTMLEncode(Request.ServerVariables("URL")) & vbCrLf strProblem = strProblem & "Content Type: " & Server.HTMLEncode(Request.ServerVariables("CONTENT_TYPE")) & vbCrLf strProblem = strProblem & "Content Length: " & Server.HTMLEncode(Request.ServerVariables("CONTENT_LENGTH")) & vbCrLf strProblem = strProblem & "Local Addr: " & Server.HTMLEncode(Request.ServerVariables("LOCAL_ADDR")) & vbCrLf strProblem = strProblem & "Remote Addr: " & Server.HTMLEncode(Request.ServerVariables("LOCAL_ADDR")) & vbCrLf strProblem = strProblem & "Time: " & Now & vbCrLf 也可以將錯(cuò)誤輸出到根目錄下一個(gè)文本文件中: <% 'Set this page up in IIS to receive HTTP 500 errors ''Type' needs to be 'URL' and the URL is e.g.: '/500Error.asp' if this file is named '500Error.asp' and is in the site root directory. 'This script assumes there is a "/Log" folder, and that IIS has write access to it. Const ForReading = 1, ForWriting = 2, ForAppending = 8 Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 Dim objFSO, err Set objFSO=createObject("scripting.FileSystemObject") Set err = Server.GetLastError() outFile=Server.MapPath("/ErrorLog.txt") Set objFile = objFSO.OpenTextFile(outFile, ForAppending, True, TristateTrue) objFile.WriteLine Now & " - ERROR - ASPCode:" & err.ASPCode & " ASPDescription: " & err.ASPDescription & " Category: " & err.Category & " Description: " & err.Description & " File: " & err.File & " Line: " & err.Line & " Source: " & err.Source & vbCrLf objFile.Close Set objFile = Nothing Set err = Nothing %> 特別說(shuō)明: GetLastError函數(shù)貌似只在IIS6以前的版本中生效,在IIS7中GetLastError函數(shù)似乎沒(méi)有任何可用的信息。其實(shí)是在IIS7中,必須按照如下步驟設(shè)置后,GetLastError函數(shù)才會(huì)生效。 打開(kāi)IIS管理器,找到網(wǎng)站ClickSun-》錯(cuò)誤頁(yè),雙擊“錯(cuò)誤頁(yè)”: 雙擊“錯(cuò)誤頁(yè)”,然后點(diǎn)擊右邊的“編輯功能設(shè)置”: 在以上頁(yè)面中,錯(cuò)誤響應(yīng)選擇:自定義錯(cuò)誤頁(yè),默認(rèn)頁(yè)-》路徑換成自己編寫(xiě)的錯(cuò)誤捕捉頁(yè)面(頁(yè)面核心代碼見(jiàn)上面):/error_500.asp,路徑類(lèi)型:執(zhí)行URL。 保存后,雙擊狀態(tài)碼500: 響應(yīng)操作改為:在此網(wǎng)站上執(zhí)行URL,URL地址還是上面自己開(kāi)發(fā)的自定義錯(cuò)誤攔截頁(yè)面(頁(yè)面核心代碼見(jiàn)上面):/error_500.asp,然后確定保存即可生效。 下面是攔截成功界面效果: 當(dāng)然,設(shè)計(jì)這個(gè)HTTP500錯(cuò)誤頁(yè)面攔截的根本目的就是不想用戶(hù)或黑客攻擊者看到真實(shí)的錯(cuò)誤代碼,但又需要將這些錯(cuò)誤信息發(fā)送給開(kāi)發(fā)者或網(wǎng)管,所以需要在自定義的錯(cuò)誤攔截頁(yè)面error_500.asp中,將上面的真實(shí)錯(cuò)誤信息保存到數(shù)據(jù)庫(kù)或文本文件中,方便開(kāi)發(fā)人員或網(wǎng)管予以分析解決,給用戶(hù)或黑客攻擊者看到的只需要是一個(gè)簡(jiǎn)單的錯(cuò)誤提醒圖片即可。 該文章在 2023/9/26 18:33:00 編輯過(guò) |
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)... |