2014-09-19 3 views
1

Я пытаюсь исправить уязвимость XSS, я окружил свой код блоком try catch для обработки HttpRequestValidationException.IIS7.5 Server.ClearError() не работает

Я не могу разделить весь код по причинам неприкосновенности частной жизни. Следующий код относится к функции, вызываемой в методе Page_Load() страницы ASP.NET.

Вот мой блок catch.

// A long try block was here ... 
    catch (HttpRequestValidationException) 
    { 
     // ASP.NET, let me handle this one. 
     Server.ClearError(); 

     Response.Write(Messages.ParameterValidationError); 
    } 

Это работает, как ожидалось на локальном хосте, но когда я опубликовать код на IIS, другой HttpRequestValidationException выбрасывается из временного класса asp.net (смотрите ниже).

Path to the wild class : '...\Temporary ASP.NET Files\<app_name>\5d4b8059\5739b33c\App_Web_n1jnrwmr.0.cs' 

Эта проблема также возникает на локальном хосте, когда я не использую Server.ClearError().

Мне нужно показать удобное сообщение об ошибке вместо этой страницы раздражающих исключений.

Любая помощь приветствуется, спасибо!

ответ

1

Почему вы не используете стандартный подход обработки ошибок ASP.NET для пользовательских ошибок в веб-конфигурации и не определяете страницу пользовательских ошибок? Если вы хотите зарегистрировать исключение в своем global.asax, добавьте метод Application_Error, который вызывается в необработанном исключении (см. Пример кода ниже).

Если вы не назовете «Server.ClearError()», то ASP.NET будет использовать страницу с ошибкой, определенную в пользовательских ошибках, и автоматически перенаправить пользователя.

protected void Application_Error(object sender, EventArgs args) 
{ 
    var exception = this.Server.GetLastError(); 
    Logger.Log(exception); 
} 

<system.web> 
     <customErrors mode="Off" defaultRedirect="~/error/notification"> 
     <!-- Required for HandleErrorFilter --> 
     <error statusCode="404" redirect="~/error/notfound" /> 
     </customErrors> 
+0

Этот проект использует другую архитектуру, и это проект предприятия; поэтому я не собираюсь изменять архитектуру. Вот почему я ищу варианты, такие как очистка ошибки и выдача результатов. Я могу использовать этот метод только в том случае, если нет другого варианта. –

+1

Имея централизованную, простую политику для устранения исключений, протоколирование и получение пользователем дружественной страницы с ошибками - это то, что должно делать корпоративное приложение. Наличие большого количества кода, который вызывает try/catch (SomeException) catch (SomeOtherException), является плохой идеей. Если бы вы не могли немного объяснить архитектуру обработки ошибок, которую вы внедрили? –

Смежные вопросы