2017-11-17 17 views
2

Azureクラウドサービスで実行されているMy MVC 5 Webアプリケーションが、「潜在的に危険なRequest.Path値がクライアント(:)から検出されました」という例外が発生してクラッシュしました。 http://myExampleHost.com/m:443/templatesWeb潜在的なクラッシュを避けるために潜在的に危険なRequest.Path値がクライアント(:)から検出されました。

URL内のコロンは、パスの検証を渡すことはできません。

このクラッシュの原因は、いくつかのサードパーティ(多分悪意のある)は、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

注:また、特定のエラーページにリダイレクトすることができます。

また、customErrorsをweb.configに活用し、特定のHTTPエラーコードのエラーページをキャッチすることもできます。また、Application_EndRequestイベントのHTTPステータスコードを確認してカスタムレスポンスを書くこともできます。詳細はissueと同じです。さらに、エラー処理の詳細についてはDemystifying ASP.NET MVC 5 Error Pages and Error Loggingに従うことをお勧めします。

+0

私は自分自身にエラーを電子メールで送信し、ユーザーに一般的なエラーを表示することで、非常に似たようなことをしています。どうすればこのエラーを特定できますか?我々は最近、特定の他の関数のために特に 'HttpRequestValidationException'をキャッチする必要があり、このエラーを特に捕まえる方法を見つけたいと思っていました。 – RoLYroLLs