Comment bloquer les demandes de tous * .php, * .cgi, etc. pages dans une application ASP.NET MVC 1.0 hébergé dans IIS7?

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

  •  20-09-2019
  •  | 
  •  

Question

Je voudrais bloquer les demandes à tout .php ou .cgi quelle que soit l'information pathing.

Par exemple, lorsque l'URL suivante est utilisée:

  

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

Il correspond à un itinéraire existant:

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

Cependant, il n'y a pas de commande pour les scripts donc MVC lancers francs comme suit:

  

Le IControllerFactory '' a fait   ne pas retourner un contrôleur pour un   contrôleur nommé 'scripts'.

Ce que je préfère vraiment que la demande est tout simplement rencontré un échec dur avant MVC jamais obtenu au contrôleur.

Je sais que je peux le faire en accrochant le Application_BeginRequest dans le Global.asax et lancer une nouvelle HttpException (404, « Not Found »), mais ce n'est pas tout à fait la solution élégante que je cherche.

J'espérais vraiment que cela fonctionnerait:

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

Mais il ne fonctionne pas.

NOTE: La réponse de Sean Lynch fonctionne très bien, mais je voudrais encore vraiment comme un System.Web.Routing ou d'une solution à base System.Web.Mvc. De cette façon, je peux permettre à mes utilisateurs d'ajouter leurs propres exclusions à l'exécution.

Était-ce utile?

La solution

Si vous fournisseur d'hébergement prend en charge le module de réécriture d'URL IIS7 alors vous pouvez consulter ce lien:

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

Mise à jour est ici ce que vous mettriez dans votre web.config dans la section 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>

Autres conseils

Je sais que c'est un ancien poste, mais si vous êtes à la recherche d'une ignorer la route pour les demandes de php (et quelques autres), y compris les demandes dans les dossiers de sous j'ai trouvé le code ci-dessous fonctionne bien (adapté de la ignorer les routes postales de Phil Haack )

J'ai aussi ajouté une spécifique ignorer la route pour la demande de l'icône tactile de pomme occasionnelle (en utilisant un caractère générique pour les différentes dimensions) et permis pour les différentes extensions de fichier pour le favicon (barre d'outils Google et d'autres navigateurs recherchent png et favicons gif ).

Bien sûr, vous pouvez ajouter un itinéraire pour tous ignorer les extensions de fichier d'image, mais dans mon cas je veux encore acheminer quelques-unes des autres demandes.

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

Malgré ces itinéraires ignorer, je pense encore que l'utilisation de la demande de blocage des fichiers php est préférable si vous avez accès à le faire.

Vous pouvez bloquer ces extensions avant qu'elle ne touche même avec IIS UrlScan ISAPI filtre de Microsoft.

scroll top