gpt4 book ai didi

asp.net-mvc - 如何阻止来自 IIS7 中托管的 ASP.NET MVC 1.0 应用程序内部的所有 *.php、*.cgi 等页面的请求?

转载 作者:行者123 更新时间:2023-12-04 00:29:42 25 4
gpt4 key购买 nike

无论路径信息如何,我都想阻止对任何 .php 或 .cgi 的请求。

例如,当使用以下 url 时:

http://mysite/Admin/Scripts/Setup.php



它匹配现有路由:
routeCollection.MapRoute("Admin", "admin/{controller}/{action}/{uid}/{*pathInfo}", new { controller = "Admin", action = "Index", uid = "" });

但是没有脚本 Controller ,因此 MVC 抛出以下内容:

The IControllerFactory '' did not return a controller for a controller named 'scripts'.



我真正喜欢的是,在 MVC 到达 Controller 之前,请求只是遇到了硬故障。

我知道我可以通过在 Global.asax 中 Hook Application_BeginRequest 并抛出一个新的 HttpException(404, "Not Found") 来做到这一点,但这并不是我正在寻找的优雅解决方案。

我真的希望这会奏效:
routeCollection.IgnoreRoute("{resource}.php/{*pathInfo}");

但事实并非如此。

注意:Sean Lynch 的回答非常有效,但我仍然非常喜欢基于 System.Web.Routing 或 System.Web.Mvc 的解决方案。这样我就可以允许我的用户在运行时添加他们自己的排除项。

最佳答案

我知道这是一篇旧帖子,但如果您正在寻找 php 请求(和其他一些)的忽略路由,包括子文件夹中的请求,那么我发现下面的代码运行良好(改编自 ignore routes post from Phil Haack)

我还为偶尔的苹果触摸图标请求添加了一个特定的忽略路由(对不同尺寸使用通配符),并允许图标的不同文件扩展名(谷歌工具栏和其他一些浏览器寻找 png and gif favicons )。

当然,您可以为所有图像文件扩展名添加忽略路由,但在我的情况下,我仍然想路由其他一些请求。

routes.IgnoreRoute("{*allphp}", new { allphp = @".*\.php(/.*)?" });
routes.IgnoreRoute("{*allcgi}", new { allcgi = @".*\.cgi(/.*)?" });
routes.IgnoreRoute("{*allaspx}", new { allaspx = @".*\.aspx(/.*)?" });

routes.IgnoreRoute("{*favicons}", new { favicons = @".*favicon\.(ico|gif|png)(/.*)?" });
routes.IgnoreRoute("{*allappleicon}", new { allappleicon = @"apple-touch-icon-.*\.png(/.*)?" });

尽管有这些忽略路由,但我仍然认为,如果您有权访问,最好对 php 文件使用请求阻塞。

关于asp.net-mvc - 如何阻止来自 IIS7 中托管的 ASP.NET MVC 1.0 应用程序内部的所有 *.php、*.cgi 等页面的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1539415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com