Comment bloquer les demandes de tous * .php, * .cgi, etc. pages dans une application ASP.NET MVC 1.0 hébergé dans IIS7?
-
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.
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.
J'ai trouvé Comment ignorer la route en asp. formes nettes URL de routage qui pourrait fonctionner pour cela, il utilise le la classe de StopRoutingHandler, et aussi longtemps que les demandes de .php ne fonctionnent par le routage cela fonctionnera probablement.
Si les demandes .php ne passent pas par le gestionnaire de routage alors ce ne fonctionnerait probablement pas.
Vous pouvez bloquer ces extensions avant qu'elle ne touche même avec IIS UrlScan ISAPI filtre de Microsoft.