ASP.NET приложения и ошибка 400 - Bad Request

воскресенье, 27 июня 2010, Александр Краковецкий

Мне иногда присылают письма с указанием на то, что наш сайт выдает 400 ошибку - Bad Request. Единственное найденное на сегодня решение - это почистить куки для сайта msug.vn.ua, после чего он снова работает.

После того, как проблема была замечена участниками ДОУ, которые славятся "любовью" к продуктам и технологиям Microsoft, они предложили много различных вариантов причины этой проблемы: от криворукости программистов (привет, Telligent!) до кривости платформы ASP.NET. Как ни странно, но ошибка 400 Bad Request, как правило, вылетала в браузере FF (иногда в Ghrome и Safari), хотя трудно сказать, если ли какая-то зависимость.

Аналогичная проблема была замечена и на других сайтах, написанных на ASP.NET, а именно на progg.ru и progblog.ru, владельцы которых являются очень компетентными специалистами, что отбрасывает первую версию ДОУ.

При исследовании проблемы были замечены следующие куки - виновники проблемы:

Это куки _utmz и _utma, которые, как известно, принадлежат Google Analytics.

Теперь разберемся, почему возникает ошибка 400 Bad Request:

From Stefan on the ASP.Net team: http://forums.asp.net/p/1431148/3221542.aspx

In current versions of ASP.NET Urls containing characters like the colon character will be rejected as a potential security threat. The historical reason for this is that the underlying NTFS file system supports alternate resource streams that can be accessed with names like "yourfile.txt:hiddendata.txt". Blocking the colon character from Urls prevents poorly written applications from accidentally working with alternate resource streams.

There is also a limitation in current versions of ASP.NET that incoming Urls need to map to the NTFS file system for purposes of determining managed configuration data.

In ASP.NET 4 these limitations can be optionally removed. However these changes are in the Beta 2 version of ASP.NET 4 - they are not in Beta 1. We tried out the Url listed earlier in this forum post and confirmed that with our internal builds of ASP.NET 4 you can use that style of Url and process it without any 400 error.

Другими словами, эта ошибка возникает, если URL содержит некорректные символы (это касается как GET так и POST запросов, куки и других переменных).

Что нам говорит Google по этому вопросу?

Таким образом, какие можно сделать выводы:

  • ни разработчики, ни ASP.NET здесь не при чем (хотя является ли это поведение правильным в данном случае - не понятно) - больше того, технология позволяет отлавливать подозрительные запросы на уровне дизайна.
  • скорее всего (это не точно на 100%) проблема заключается в том, что google analytics не энкодирует строки перед сохранением
  • почему ошибка возникает именно в FF - ответить сложно (здесь, здесь и еще много где обсуждается эта проблема), но решением всегда выступает очистка куки, поэтому можно предположить, что причина где-то кроется в недрах FireFox (особенности обработки куки, extensions и т.д.)

Последнее время проблема показывается очень редко, но нельзя исключать возможности ее появления в будущем. Если кто-то сталкивался с похожими проблемами - дайте знать.

Компании из статьи


Microsoft Украина


Сайт:
http://www.microsoft.com/ukr/ua/

Microsoft Украина Украинское подразделение компании Microsoft.

Ищите нас в интернетах!

Комментарии

Свежие вакансии