Wie blockiere ich Anfragen für alle * .php, * .cgi usw. Seiten aus dem Inneren einer ASP.NET MVC 1.0 app in IIS7 gehostet?

StackOverflow https://stackoverflow.com/questions/1539415

  •  20-09-2019
  •  | 
  •  

Frage

Ich möchte Anfragen an jedem .php oder .cgi unabhängig von den Wegfindung Informationen blockieren.

Wenn zum Beispiel der folgende URL verwendet:

  

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

Es bringt eine bestehende Route:

routeCollection.MapRoute("Admin", "admin/{controller}/{action}/{uid}/{*pathInfo}", new { controller = "Admin", action = "Index", uid = "" });

Allerdings gibt es keine Controller für Skripte so MVC die folgende wirft:

  

Die IControllerFactory '' tat   nicht einen Controller für eine Rückkehr   Controller namens 'Skripte'.

Was ich wirklich würde es vorziehen, dass die Anfrage einfach mit einem harten erfüllt wird scheitern, bevor jemals MVC an den Controller bekam.

Ich weiß, dass ich das tun kann, indem die Application_BeginRequest in der Global.asax Einhaken und werfen ein neues Httpexception (404, „Not Found“), aber das ist nicht ganz elegante Lösung suche ich.

Ich habe wirklich gehofft, dass dies funktionieren würde:

routeCollection.IgnoreRoute("{resource}.php/{*pathInfo}");

Aber es funktioniert nicht.

Hinweis: Sean Lynch Antwort funktioniert gut, aber ich würde immer noch wirklich wie ein System.Web.Routing oder System.Web.Mvc basierte Lösung. So kann ich meine Benutzer erlauben kann, ihre eigenen Ausschlüsse zur Laufzeit hinzuzufügen.

War es hilfreich?

Lösung

Wenn Sie Provider unterstützt die IIS7 URL Rewrite-Hosting-Modul, dann können Sie diesen Link finden Sie unter:

http://learn.iis.net /page.aspx/499/request-blocking---rule-template/

Update hier, was Sie in Ihrer web.config im system.webServer Abschnitt setzen würde:

<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>

Andere Tipps

Ich weiß, dass dies eine alte Post, aber wenn Sie sich für eine ignorieren Route für PHP-Anfragen (und einige andere) einschließlich Anfragen innerhalb von Unterordnern suchen, dann habe ich den Code unten funktioniert gut gefunden (aus der ignorieren Routen von Phil Haack Post )

ich auch eine bestimmte ignorieren Route für den gelegentlichen Apfel touch-Symbol Anfrage (mit einem Platzhalter für die verschiedenen Dimensionen) und erlaubt für die verschiedenen Dateiendungen für das Favicon (Google Toolbar und einige andere Browser sucht png und gif favicons ).

Natürlich könnte man eine ignorieren Route für alle Bilddateierweiterungen hinzufügen, aber in meinem Fall möchte ich noch einige der anderen Anfragen zu routen.

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(/.*)?" });

Trotz dieser ignorieren Strecken mit, ich glaube immer noch, dass Anforderung für PHP-Dateien blockiert mit vorzuziehen ist, wenn Sie Zugriff haben, es zu tun.

fand ich Wie Route in asp zu ignorieren. net Formen url Routing , die für diese funktionieren könnte, verwendet es die StopRoutingHandler Klasse, und solange die Anforderungen an .php laufen durch den Routing dies wird wahrscheinlich zu arbeiten.

Wenn die .php-Anforderungen werden nicht durch die Routing-Handler gehen dann ist dies wahrscheinlich nicht funktionieren würde.

Sie können diese Erweiterungen blockieren, bevor es selbst trifft IIS mit Microsofts UrlScan ISAPI Filter.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top