請問各位先進,如何檢查網址列是否有特殊字元呢?
例:www.11022.com.tw/ => 這是正常網址
但有人故意輸入 www.11022.com.tw/<img src="javascript:alert('XSS');">
頁面顯示出
Server Error in '/' Application.
Runtime Error
Description: An exception occurred while processing your request. Additionally, another exception occurred while executing the custom error page for the first exception. The request has been terminated.
請問有辦法在顯示畫面前就發現網址有問題並且轉到指定錯誤頁面嗎?
感謝各位先進的閱讀,如果問題不清楚再麻煩提問一下囉!
感謝您~
請在 Global.asax 檔案中建立錯誤處理常式,它會在處理要求時攔截所有未處理的 ASP.NET 錯誤,換句話說,就是無法以 Try/Catch 區塊或頁面層級錯誤處理常式攔截的所有錯誤。 在這個範例中,處理常式會將控制項傳送至名為 GenericErrorPage.aspx 的泛型錯誤頁面,它將解譯錯誤並顯示適當的訊息。
Global.asax 檔中定義的錯誤處理常式只會攔截在 ASP.NET 執行階段處理要求期間發生的錯誤。 例如,如果使用者要求應用程式中不存在的 .aspx 檔案,它就會攔截該錯誤。 然而,如果使用者要求不存在的 .htm 檔案,則不會攔截錯誤。 針對非 ASP.NET 錯誤,您可以在網際網路資訊服務 (IIS) 中建立自訂處理常式。 但也不會對伺服器層級錯誤呼叫自訂處理常式。
請參考 MSDN 範例
HOW TO:處理應用程式層級的錯誤
http://msdn.microsoft.com/zh-tw/library/24395wz3%28v=vs.100%29.aspx
這是用ASP的方法(觀念),ASPX應該也類似
在網頁最前面
判斷 Request.QueryString.Count > 0
為是否有URL參數傳進來
有的話判斷Request.QueryString內是否有 < 字元(此法可能會誤判),
有的話轉頁到警告頁或結束處理
比較好的作法是Request進來的資料先用正規化將HTML標籤濾掉(如RemoveHTML函式),
或將HTML標籤改成html字元如 < → < > → >
減少網路的惡意攻擊
'────────────────────────────────
Function RemoveHTML(StrHTML, sType) '// 清除HTML標籤
'────────────────────────────────
Dim ObjRegExp, Match, Matches
Set ObjRegExp = New Regexp
ObjRegExp.IgnoreCase = True
ObjRegExp.Global = True
' 取成對的<>
ObjRegExp.Pattern = "<.+?>"
' 進行比對
Set Matches = ObjRegExp.Execute(StrHTML)
' 搜尋比對集合,並替換掉比對的項目
For Each Match In Matches
StrHtml = Replace(StrHTML, Match.Value, "")
Next
If sType = 1 And StrHtml = "" Then StrHtml = "……"
RemoveHTML = StrHTML
Set ObjRegExp = Nothing
End Function