IIS Express(经典模式)或IIS 6上的MVC3返回404文件扩展名(cgi等)

时间:2011-06-24 00:16:36

标签: asp.net-mvc-3 url-routing asp.net-4.0

我正在尝试重新创建由HP的WebInspect完成的测试,以验证可能的攻击媒介。在这种情况下,它将CrazyWWWBoard.cgi固定到任何URL的末尾。在我的应用程序中,当我尝试这个时,我得到IIS 404页面,而不是我的自定义错误页面。此外,在IIS Express 404中,我可以告诉处理程序被引用为StaticFile。没有控制器甚至路由代码(我通过在每个路由上放置一个空路由约束来测试它,其匹配方法立即返回true并在那里设置一个断点。)被命中。 Web.Config基本上来自MVC3(除了一些应该与此无关的appsettings)。我在没有扩展名(cgi)的情况下对此进行了测试,代码的行为符合预期。我正在使用.NET 4无扩展URL来完成应用程序的其余部分,并且正常行为可以正常工作。当我使用cgi时,它会给IIS提供404. 我是否需要通过web.config替换StaticFileHandler?

更新:在进行一些进一步测试时,从Application_BeginRequest开始的.NET组件永远不会被命中。根据我的经验,这意味着永远不会调用web.config中定义的错误页面。我还回去并为我的控制器名称添加了一个.aspx扩展名(即http:\ localhost \ myapp \ controller.aspx \ action \ test.cgi),然后即使使用“cgi”扩展名,也会将URL提供给.NET组件。这是ASP.NET 4 / MVC / IIS6无扩展URL方案的限制吗?如果有,有任何解决方法吗?我宁愿保持无扩展,但如果情况更糟,我将返回控制器中的.aspx。了解我无法控制服务器端设置。

2 个答案:

答案 0 :(得分:0)

将其添加到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的任何内容,将我发送到我的标准错误页面,而不更改Web服务器本身的任何内容。)

顺便说一句,请不要更改您的网址以包含.aspx,因为这会违背MVC的精神!此外,攻击者只能省略.aspx并仍然获得404页面,除非您实施我的微小修复。

编辑: 如果您将其放入<httpHandlers>的{​​{1}}部分会发生什么?

web.config

答案 1 :(得分:0)

我经历过你现在遇到的同样的事情,这篇文章让我得到了我需要的地方...来自haacked.com

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