2017-11-17 177 views
2

在Azure Cloud Service上運行的我的MVC 5 Web應用程序崩潰,出現未處理的異常「從客戶端(:)」檢測到潛在危險的Request.Path值。如何捕獲「從客戶端(:)」檢測到潛在危險的Request.Path值以避免Web角色崩潰?

原因此崩潰是一些第三方(可能惡意)打我的終點與網址: http://myExampleHost.com/m:443/templates

在URL中的冒號不能通過路徑驗證。

一些答案(A potentially dangerous Request.Path value was detected from the client (*))建議更改驗證規則。但是,出於安全考慮,我們可能不想妥協。

理想的行爲是這樣的:我們捕獲異常,記錄並返回一些錯誤信息而不會崩潰。我們應該怎麼做?

對此的一個更一般的問題是:如何在請求命中MVC控制器之前捕獲異常?

回答

2

理想的行爲是這樣的:我們捕獲異常,記錄並返回一些錯誤信息而不會崩潰。我們應該怎麼做?

根據我的理解,您可以利用Application_Error事件捕獲ASP.NET中未處理的異常。這裏是我的測試,你可以參考一下吧:

protected void Application_Error() 
{ 
    HttpContext httpContext = HttpContext.Current; 
    var exception=Server.GetLastError(); 
    var httpException = exception as HttpException ?? new HttpException(500, "Internal Server Error", exception); 
    var jsonResponse = new 
    { 
     Message = exception.Message, 
     StatusCode = httpException.GetHttpCode(), 
     StackTrace=httpException.StackTrace 
    }; 
    httpContext.Response.ContentType = "application/json"; 
    httpContext.Response.ContentEncoding = Encoding.UTF8; 
    httpContext.Response.Write(JsonConvert.SerializeObject(jsonResponse)); 
    httpContext.Response.End(); 
} 

enter image description here

注:你也可以重定向到一個特定的錯誤頁面。

此外,您可以利用web.config中的customErrors並捕獲特定HTTP錯誤代碼的錯誤頁面。此外,您可以檢查Application_EndRequest事件下的HTTP狀態代碼並編寫自定義響應,詳細信息可參考此類似的issue。此外,我建議您按照Demystifying ASP.NET MVC 5 Error Pages and Error Logging獲取有關錯誤處理的更多詳細信息。

+0

我喜歡你所做的,因爲我們通過將錯誤發送給自己並向用戶顯示一個通用錯誤來做類似的事情。我們怎樣才能專門捕捉到這個錯誤?我們最近發現,我們需要專門爲某些其他函數捕獲'HttpRequestValidationException',並且希望找到一種專門捕獲此錯誤的方法。 – RoLYroLLs

相關問題