MVC3 на IIS Express (классический режим) или IIS 6 возвращает 404 с расширениями файлов (cgi и т. Д.) - PullRequest
1 голос
/ 24 июня 2011

Я пытаюсь воссоздать тест, выполненный HP WebInspect, чтобы проверить возможный вектор атаки.В этом случае он прикрепляет CrazyWWWBoard.cgi к концу любого URL.В моем приложении, когда я пытаюсь это сделать, я получаю страницу IIS 404, а не свою страницу ошибки.Кроме того, в IIS Express 404 я могу сказать, что обработчик упоминается как StaticFile.Нет контроллера или даже кода маршрутизации (я проверил это, поместив пустое ограничение маршрута на каждый маршрут, метод сопоставления которого немедленно возвращает true и просто установил там точку останова).Web.Config - это в основном то, что происходит от MVC3 (за исключением некоторых настроек приложений, которые не должны иметь к этому никакого отношения).Я проверил это без расширения (CGI), и код ведет себя как ожидалось.Я использую .NET 4 без расширения URL для остальной части приложения, и нормальное поведение работает.Когда я использую cgi, он выдаёт IIS 404. Нужно ли мне заменить StaticFileHandler через web.config?

ОБНОВЛЕНИЕ: При выполнении какого-либо дальнейшего тестированияКомпоненты .NET, начинающиеся с Application_BeginRequest, НИКОГДА не поражаются.Исходя из моего опыта, это означает, что страницы ошибок, определенные в web.config, никогда не вызываются.Я также вернулся и добавил расширение .aspx к именам моих контроллеров (то есть http: \ localhost \ myapp \ controller.aspx \ action \ test.cgi), а затем URL-адрес подается в компоненты .NET даже с расширением "cgi",Является ли это ограничением для сценария URL без расширения ASP.NET 4 / MVC / IIS6?Если да, то есть ли обходные пути?Я бы предпочел остаться без расширения, но если хуже станет хуже, я вернусь к .aspx в моих контроллерах.Поймите, что я НЕ управляю настройкой на стороне сервера.

Ответы [ 2 ]

0 голосов
/ 24 июня 2011

Я испытал то же, что и вы сейчас, и эта статья привела меня туда, где я должен был быть ... от haacked.com

http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx

0 голосов
/ 24 июня 2011

Добавьте это в RegisterRoutes раздел Global.asax.cs

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); // This one is here by default
routes.IgnoreRoute("{resource}.cgi/{*pathInfo}"); // This is your new one
// Other routes go AFTER these two as before.

И убедитесь, что в вашем файле web.config также включен customErrors, который, я уверен, вы ужесделанный.

Я только что попробовал, и это работает (т.е. добавление чего-либо с помощью .cgi отправило меня на мою стандартную страницу с ошибкой, без каких-либо изменений на самом веб-сервере).

В качестве отступления, пожалуйстане меняйте свои URL-адреса, добавляя в конце .aspx, так как это противоречит духу MVC!А также злоумышленник может просто пропустить .aspx и все равно получить страницу 404, если вы не внедрили мое крошечное исправление.

РЕДАКТИРОВАТЬ: Что произойдет, если вы поместите это в свой <httpHandlers> раздел web.config?

<add verb="*" path="*.cgi" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
...