Проблема с URL, который заканчивается на% 20 - PullRequest
14 голосов
/ 14 июля 2009

У меня большая проблема. В прямом эфире есть устройства, которые отправляют URL "/ updates". Это опечатка разработчика для этих устройств. В журналах сервера это выглядит как "/updates+".

У меня есть модуль переписывания ManageURL, который обрабатывает все запросы без расширения. Но этот запрос вызывает HttpException:

System.Web.HttpException:

System.Web.HttpException
   at System.Web.Util.FileUtil.CheckSuspiciousPhysicalPath(String physicalPath)
   at System.Web.HttpContext.ValidatePath()
   at System.Web.HttpApplication.ValidatePathExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Как я вижу в журналах, модуль перезаписи URL даже не получает этот URL, поэтому я не могу исправить его там.

Есть ли способ обработать эти URL с помощью ASP.NET?

Ответы [ 4 ]

20 голосов
/ 11 марта 2011

Хорошо, это старый поток, но я хотел бы добавить работоспособное решение, которое работает для всех версий ASP.NET. Посмотрите этот ответ в связанной ветке . Это в основном сводится к регистрации на событие PreSendRequestHeaders в global.asax.cs.

Либо в ASP.NET 4.0 или более поздней версии используйте <httpRuntime relaxedUrlToFileSystemMapping="true" /> в web.config.

1 голос
/ 14 июля 2009

Согласно некоторым , это в System.Web.dll:

internal static void CheckSuspiciousPhysicalPath(string physicalPath)
{
  if (((physicalPath != null) && (physicalPath.Length > 0))
    && (Path.GetFullPath(physicalPath) != physicalPath))
  {
    throw new HttpException(0x194, "");
  }
}

Полагаю, вы не можете это изменить, но нельзя ли отключить его в настройках IIS? Конечно, это также отключило бы все другие проверки ...: - (

Или напишите какой-нибудь ISAPI-фильтр, который запускается перед кодом выше? Написание собственного модуля называется легким, согласно Изящно обрабатывайте URI-атаки в ASP.NET .

Или создайте собственную страницу ошибки . На этой странице (как предложено в ссылке для взлома URI выше) найдите конкретный текст в exception.TargetSite.Name, например CheckSuspiciousPhysicalPath, и, если он найден (или просто всегда), посмотрите на current.Request.RawUrl или что-то в этом роде , устранить ошибку и перенаправить на восстановленный URL?

1 голос
/ 17 июля 2009

вы можете запустить ISAPI с перезаписью URL, например IIRF .

0 голосов
/ 14 июля 2009

Если у вас есть доступ к коду, почему бы просто не проверить «+» в конце и удалить его?

...