Потенциально опасные символы в параметрах запроса (не Request.Path!)

Вопросов на эту тему много, но для нашего частного случая не нашел...

У нас работает производительный сайт, и время от времени — от 5 до 10 раз в день — мы получаем уведомления об ошибках с потенциально опасными значениями Request.Path. Странно то, что настоящие «опасные» символы находятся не в пути запроса, а в параметрах.

При просмотре объекта запроса мы получаем такие значения:

HttpContext.Current.Request.Url.AbsolutePath --> /relative/path/to/page
HttpContext.Current.Request.Url.Query        --> ?param1=value&param2=value

ASP.NET жалуется на ? в параметрах:

Message: A potentially dangerous Request.Path value was detected from the client (?). (System.Web.HttpException)

Stacktrace: 
   at System.Web.HttpRequest.ValidateInputIfRequiredByConfig()
   at System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)

Но, с моей точки зрения, все в порядке (это действительно действительные URL-адреса, и если я набираю их в браузере, они работают).

Мы также отслеживаем IP-адрес клиента и пользовательский агент клиента, и они в основном связаны с некоторыми поисковыми роботами. Возможно ли, что они строят ошибочный запрос, который вызывает эти ошибки?


person jor    schedule 10.06.2014    source источник
comment
Как узнать, что эта ошибка произошла? Кто вызывает ошибку, общедоступен ли сайт? Какой именно запрос вызывает это сообщение?   -  person CodeCaster    schedule 11.06.2014
comment
Мы добавили обработчик ошибок в Global.asax и получаем уведомления об ошибках по электронной почте. Да, сайт общедоступен. Запрос, как указано в вопросе - что еще может быть полезно?   -  person jor    schedule 11.06.2014


Ответы (1)


Вероятно, вы используете asp.net 4.0 или выше. Это более «придирчиво», чем предыдущие версии. Следующие символы фильтруются по умолчанию:

< > * % & : \ ?

Вы можете изменить их в своем web.config:

<httpRuntime requestPathInvalidCharacters="<,>,*,%,&,:,\,?" />

Возможно, поисковые роботы или некоторые браузеры используют escape-символы, которые содержат %, например, при отправке запроса. Еще немного литературы по теме: Experiments In Wackiness, разрешающие проценты, угловые скобки и другие непристойные вещи в ASPNETIIS RequestURL< /а>

person Peter    schedule 10.06.2014
comment
Хорошая мысль голландские фрукты ;) . Можем ли мы указать, что URL-адрес похож на /relative/path/to/page??param1=value&param2=value (с двойным ?)? - person Patrick Hofman; 10.06.2014
comment
Нет, проблема не в самих отфильтрованных символах, а в том, что эти символы появляются не в Request.Path, а в Query. И им абсолютно разрешено туда. - person jor; 11.06.2014