Dou*_*son 12 asp.net-mvc ignoreroute
无论路径信息如何,我都想阻止对任何.php或.cgi的请求.
例如,使用以下URL时:
http:// mysite /Admin/Scripts/Setup.php
它匹配现有路线:
routeCollection.MapRoute("Admin", "admin/{controller}/{action}/{uid}/{*pathInfo}", new { controller = "Admin", action = "Index", uid = "" });
Run Code Online (Sandbox Code Playgroud)
但是没有脚本控制器,所以MVC抛出以下内容:
IControllerFactory''没有返回名为'scripts'的控制器的控制器.
我真正喜欢的是,在MVC进入控制器之前,请求只是遇到了一次硬故障.
我知道我可以通过在Global.asax中挂钩Application_BeginRequest并抛出一个新的HttpException(404,"Not Found")来做到这一点,但这不是我想要的优雅解决方案.
我真的希望这会奏效:
routeCollection.IgnoreRoute("{resource}.php/{*pathInfo}");
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.
注意:Sean Lynch的答案很有效,但我仍然非常喜欢基于System.Web.Routing或System.Web.Mvc的解决方案.这样我就可以允许我的用户在运行时添加自己的排除项.
rob*_*mzd 15
我知道这是一个旧帖子,但如果你正在寻找一个忽略路由的php请求(以及其他一些)包括子文件夹中的请求,那么我发现下面的代码运行良好(改编自Phil Haack的忽略路由)
我还为偶尔的Apple触摸图标请求添加了一个特定的忽略路由(使用不同维度的通配符),并允许使用favicon的不同文件扩展名(Google工具栏和其他一些浏览器查找png和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(/.*)?" });
Run Code Online (Sandbox Code Playgroud)
尽管有这些忽略路由,我仍然认为如果你有权访问php文件请使用请求阻止.
如果您的托管服务提供商支持IIS7 URL重写模块,那么您可以查看此链接:
http://learn.iis.net/page.aspx/499/request-blocking---rule-template/
这里更新是您将在system.webserver部分中放入web.config的内容:
<system.webServer>
<rewrite>
<rules>
<rule name="RequestBlockingRule1" patternSyntax="Wildcard">
<match url="*" />
<conditions>
<add input="{URL}" pattern="*.php*" />
</conditions>
<action type="CustomResponse" statusCode="403" />
</rule>
</rules>
</rewrite>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4852 次 |
最近记录: |