2013-12-04 2 views
1

Похоже, что в customErrors по умолчанию перенаправляется ошибка в web.config. В моем файле web.config у меня есть следующее CustomErrors установкаASP.NET customErrors web.config не обнаруживает все недопустимые URL-адреса

<customErrors defaultRedirect="~/generalerror.html?" mode="On" /> 

Насколько я знаю, это должно отправить все ошибки на страницу пользовательских generalerror.html. Это похоже на работу для некоторых недействительных URLS как

http://website.com/?x="<p>" 
http://website.com/"<p>" 

НО он не работает, когда «&» используется в URL и нет «?» и есть HTML тегов. Так что

http://website.com/&x="<p>" 

полностью игнорирует CustomErrors и вы получаете ошибки по умолчанию желтого времени выполнения вместо того, чтобы перейти на страницу пользовательских generalerror.html. Как заставить этот URL-адрес также перенаправляться на страницу пользовательских ошибок?

Если я включаю режим = «Off» в web.config я получаю следующую ошибку

A potentially dangerous Request.RawUrl value was detected from the client (="/&x="<p>""). 
+1

HTH! http://stackoverflow.com/questions/10837647/showing-custom-error-message-on-exception-a-potential-dangerous-request-form http://stackoverflow.com/questions/9498180/customizing-a-potential -dangerous-request-path-value-detected-error-page. Вещь, о которой вам нужно помнить, заключается в том, что это исключение вызывается до того, как произойдет код страницы. Таким образом, вы обычно не можете поймать ошибку в своем коде страницы, но только в Application_Error. – Joe

+0

Я сейчас ничего не делаю на уровне кода, но спасибо за ссылки. Я просто использую тег customrors web.config для перенаправления ошибок на определенную страницу. Это должно работать из того, что я прочитал. На самом деле это работает, насколько я могу судить, за исключением особого примера, который я дал. Мне просто нужно найти, почему он не работает в этом случае. – user2986086

+0

Если вы используете IIS7 +, здесь есть более простое решение: http://stackoverflow.com/questions/30071341/asp-net-mvc-customerror-page- Невозможно получить-отображать-для-некоторых-400-ошибок/30072933 # 30072933 –

ответ

0

Поскольку вы передаете HTML-тег в URL, это может быть признаком межсайтовых сценариев атаки , Не все HTML-теги опасны, но когда в HTML-символах следуют определенные символы, такие как «&» в вашем случае, asp.net рассматривает его как межсайтовый скриптовый сценарий и не позволяет его по умолчанию.

Вы должны рассмотреть возможность кодирования URL-адреса, чтобы обойти это. И это всегда лучшая практика. Here - хорошее объяснение XSS. И here - это ссылка, в которой подробно объясняется, как обойти эту проблему.

Чтобы изменить это поведение, вы можете установить проверку запроса на false в web.config.

<configuration> 
<system.web> 
    <pages validateRequest="false" /> 
</system.web> 
</configuration> 

Но в этом случае запросы должны быть подтверждены на страницах.

Внесены изменения в проверку запроса ASP.NET в .NET 4.0, и эта запись требуется для отмены поведения на .NET 2.0, где неверные URL-адреса будут перенаправлены на страницу пользовательских ошибок.

<httpRuntime requestValidationMode="2.0" /> 
+0

Есть потенциальные хакеры и клиенты, которые пытаются опубликовать недопустимые URL-адреса, и мне нужно обязательно отправить их на ту же страницу ошибок для постоянный внешний вид. Я не хочу отключать проверку.Я просто хочу отправить эти запросы на мою страницу с ошибкой, когда они произойдут. – user2986086

+0

Да, если вы отключите проверку, вам нужно подтвердить запрос на странице, где вы можете перенаправить его на страницу с ошибкой, если это недопустимый запрос. См. Эту ссылку http://stackoverflow.com/questions/20009815/a-potential-dangerous-request-querystring-value-was-detected-from-the-client – Poornima

+0

Добавление запросаValidationMode = "2.0" в тег httpRuntime позволяет URL-адрес Я упоминал, что обрабатывается правильно. Так спасибо за помощь – user2986086

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