Come faccio a bloccare le richieste di tutti * .php, .cgi *, ecc pagine all'interno di un ASP.NET MVC 1.0 app ospitato in IIS7?

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

  •  20-09-2019
  •  | 
  •  

Domanda

Mi piacerebbe bloccare le richieste a qualsiasi .php o .cgi indipendentemente dalle informazioni pathing.

Ad esempio, se si utilizza il seguente URL:

  

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

Si abbina una rotta esistente:

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

Tuttavia non v'è alcun controller per gli script in modo MVC genera la seguente:

  

L'IControllerFactory '' ha fatto   Non restituire un controller per un   Controller di nome 'script'.

Quello che mi piacerebbe molto preferisco è che la richiesta è semplicemente incontrato con un disco fallire prima MVC mai avuto modo di controllore.

So che posso fare questo agganciando l'Application_BeginRequest nel Global.asax e gettando una nuova HttpException (404, "Not Found"), ma non è proprio la soluzione elegante che sto cercando.

Ero veramente sperando che questo dovrebbe funzionare:

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

Ma non è così.

NOTA: la risposta di Sean Lynch grandi opere, ma ho ancora sarebbe davvero come uno System.Web.Routing o soluzione basata System.Web.Mvc. In questo modo posso permettere ai miei utenti di aggiungere i propri esclusioni in fase di esecuzione.

È stato utile?

Soluzione

fornitore

Se l'hosting supporta il modulo URL Rewrite IIS7 allora si potrebbe verificare questo link:

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

Aggiornamento qui è quello che si deve mettere nel web.config nella sezione system.webServer:

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

Altri suggerimenti

So che questo è un vecchio post, ma se siete in cerca di una via di ignorare le richieste di php (e alcuni altri) comprese le richieste all'interno di sottocartelle poi ho trovato il codice qui sotto funziona bene (adattato dal ignorare le rotte inviano da Phil Haack )

Ho anche aggiunto una specifica ignorare percorso per la richiesta occasionale mela sfiorare l'icona (usando una wildcard per le diverse dimensioni) e permesso per le diverse estensioni di file per la favicon (barra degli strumenti di Google e alcuni altri browser cercano png e favicon gif ).

Naturalmente si potrebbe aggiungere un ignore percorso per tutte le estensioni di file immagine, ma nel mio caso ho ancora voglia di percorso alcune delle altre richieste.

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

Pur avendo questi percorsi ignorare, io continuo a pensare che l'utilizzo di richiesta di blocco per i file PHP è preferibile se si ha accesso a farlo.

Come ignorare percorso in ASP. forme nette URL di routing che potrebbe funzionare per questo, utilizza il StopRoutingHandler di classe, e finché le richieste .php non correre attraverso l'instradamento questo probabilmente funzionerà.

Se le richieste .php non stanno attraversando il gestore di instradamento, allora questo probabilmente non avrebbe funzionato.

Si potrebbe bloccare queste estensioni prima che colpisca ancora IIS con UrlScan filtro ISAPI di Microsoft.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top