¿Cómo bloqueo solicitudes de todos * .php, * .cgi, etc. páginas desde el interior de un 1.0 aplicación ASP.NET MVC alojada en IIS 7?

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

  •  20-09-2019
  •  | 
  •  

Pregunta

Me gustaría para bloquear las solicitudes a cualquier .php o .cgi independientemente de la información encauzamiento.

Por ejemplo, cuando se utiliza la siguiente url:

  

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

Se corresponde con una ruta existente:

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

Sin embargo no hay un controlador de scripts para MVC desencadena la siguiente:

  

El IControllerFactory '' hizo   no devolver un controlador para una   Controlador 'scripts' nombrado.

Lo que realmente prefiero es que la petición es simplemente se reunió con un duro antes de fallar alguna vez se MVC al controlador.

Sé que puedo hacer esto enganchando la Application_BeginRequest en el Global.asax y lanzando un nuevo HttpException (404, "no encontrado"), pero que no es del todo la solución elegante que estoy buscando.

Me esperaba que esto funcionaría:

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

Pero no lo hace.

NOTA: La respuesta de Sean Lynch funciona muy bien, pero todavía me gusta mucho un System.Web.Routing o solución basada System.Web.Mvc. De esa manera puedo permitir que mis usuarios añadir sus propias exclusiones en tiempo de ejecución.

¿Fue útil?

Solución

proveedor

Si de alojamiento soporta el módulo de reescritura de URL IIS7 continuación se puede consultar este enlace:

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

Actualizar aquí es lo que cabe poner en su web.config en la sección 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>

Otros consejos

Sé que esto es una entrada antigua, pero si usted está buscando una ruta para hacer caso omiso de las peticiones de PHP (y algunos otros), incluyendo las solicitudes dentro de las subcarpetas entonces he encontrado el siguiente código funciona bien (adaptado de la ignorar rutas post de Phil Haack )

También se ha añadido una específica ignoran ruta para la solicitud de vez en cuando manzana icono de contacto (usando un comodín para las diferentes dimensiones) y se dejó para las diferentes extensiones de archivo para el favicon (barra de herramientas de Google y algunos otros navegadores buscan png y favicons gif ).

Por supuesto, se podría añadir un ignoran ruta para todas las extensiones de archivo de imagen, pero en mi caso todavía quieren encaminar algunas de las otras solicitudes.

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

A pesar de tener estas rutas ignorar, sigo pensando que el uso de solicitud de bloqueo de archivos PHP es preferible si tiene acceso a hacerlo.

Cómo ignorar ruta en asp. formas netas URL de enrutamiento que podría trabajar para ello, utiliza el clase StopRoutingHandler , y siempre y cuando las solicitudes de .php se ejecutan a través del enrutamiento esto probablemente va a funcionar.

Si las solicitudes .php no van a través del controlador de enrutamiento entonces esto probablemente no funcionaría.

Se puede bloquear estas extensiones antes de que incluso golpea con IIS UrlScan filtro ISAPI de Microsoft.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top