Проверка URL ASP.NET - PullRequest
       31

Проверка URL ASP.NET

10 голосов
/ 17 ноября 2008

У нас есть специальный обработчик REST в ASP.NET, который настроен следующим образом для обработки всех входящих запросов:

<add path="*" verb="*" type="REST.RESTProtocolHandler"/>

Однако, передав ему символ канала, должным образом закодированный или нет, вызывает ошибку проверки, которая, похоже, происходит из-за ASP.NET.

Доступ к <a href="http://localhost:8080/%7c" rel="nofollow noreferrer">http://localhost:8080/%7c</a> или <a href="http://localhost:8080/|" rel="nofollow noreferrer">http://localhost:8080/|</a> приводит к этой ошибке:

[ArgumentException: недопустимые символы в пути.] System.IO.Path.CheckInvalidPathChars (String path) +7489125 System.IO.Path.Combine (String path1, String path2) +40 System.Web.Configuration.UserMapPath.GetPhysicalPathForPath (путь строки, отображение VirtualDirectoryMapping) +114 System.Web.Configuration.UserMapPath.GetPathConfigFilename (String siteID, путь VirtualPath, String & directory, String & baseName) +72 System.Web.Configuration.UserMapPath.MapPath (String siteID, путь VirtualPath) +30 System.Web.Configuration.UserMapPath.MapPath (String siteID, String path) +31 System.Web.Hosting.HostingEnvironment.MapPathActual (VirtualPath virtualPath, логический allowNull) +297 System.Web.Hosting.HostingEnvironment.MapPathInternal (VirtualPath virtualPath, логический allowNull) +51 System.Web.CachedPathData.GetConfigPathData (String configPath) +341 System.Web.CachedPathData.GetVirtualPathData (VirtualPath virtualPath, логическое allowPathsOutsideApp) +110 System.Web.HttpContext.GetFilePathData () +36 System.Web.HttpContext.GetConfigurationPathData () +26 System.Web.Configuration.RuntimeConfig.GetConfig (контекст HttpContext) +43 System.Web.Configuration.CustomErrorsSection.GetSettings (контекст HttpContext, логическое значение canThrow) +41 System.Web.HttpResponse.ReportRuntimeError (Исключение e, логическое значение canThrow, логическое значение localExecute) +101 System.Web.HttpRuntime.FinishRequest (HttpWorkerRequest wr, контекст HttpContext, исключение e) + 383

Никакой код пользователя не выполняется. Это вариант конфигурации где-то? Воспроизведено на сервере devel IIS 7 & VS Studio 2008.

Похоже, переполнение стека обрабатывает эту ошибку. Хорошо, похоже, что динамически генерируемая страница 404 MVC обрабатывается для https://stackoverflow.com/%7c.

Есть идеи?

Ответы [ 5 ]

1 голос
/ 12 февраля 2009

и вуаля это работает.

Но я сделал эту работу с IIS7 без проблем, но с IIS6 я получаю эту ошибку (Неверные символы в пути).

1 голос
/ 19 ноября 2008

Попробуйте перехватить исключение в файле Global.asax. Реализуйте там (Global.asax.cs) этот метод:

protected void Application_Error(Object sender, EventArgs e)
{
    Exception ex = Server.GetLastError();
    //do whatever you want with that exception
    //or get the url from the context, reformat and redirect
}
0 голосов
/ 06 июня 2012

Я думаю, что ответ в вашей трассировке стека. Ошибка вызывается при вызове System.IO.Path.CheckInvalidPathChars () - это не проверка URL-адреса, а проверка файловой системы Windows, в которой находится IIS. Это не столько случай, когда символ канала является Url нелегальным, но в основном DOS нелегальным.

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

0 голосов
/ 21 ноября 2008

У меня есть похожая программа, которая перехватывает все и пробуя ее с помощью канала, выдает мне ту же ошибку. Я предполагаю, что это связано с IIS, выполняющим тестирование пути (mappath), прежде чем он узнает, кто должен обрабатывать запрос. Ваш обработчик получает корень (имеется в виду все вызовы), но я предполагаю, что способ IIS делает его универсальным.

Таким образом, я предполагаю, что любые или большинство символов пути, которые вы не можете использовать в своей файловой системе, не будут выполнены по запросу IIS (GET / POST).

Может быть, кто-то знает, как отключить проверку IIS. Судя по ошибке, это происходит даже до того, как ваш web.config будет прочитан, так как он пытается найти правильный конфиг?,

Может быть, можно использовать собственную страницу с ошибкой в ​​качестве перенаправления обратно на ваш обработчик?

0 голосов
/ 17 ноября 2008

По умолчанию IIS не разрешает определенные символы в URL и считает их недопустимыми. Отсюда ваша проблема - она ​​даже не вызывает ваш обработчик. Насколько я знаю, нет места, где вы можете настроить, какие символы принимаются через пользовательский интерфейс, за исключением реестра Windows. Я не знаю, почему вы хотите использовать трубу, но я не думаю, что это хорошая практика. Что касается страницы ошибок - вы всегда можете иметь собственную страницу ошибок для любого исключения, чтобы пользователи не видели уродливые сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...