Toma un sitio PHP al azar. Básicamente, se garantiza que su servidor web está configurado de la siguiente manera: sirve cualquier archivo desde la raíz del documento, excepto ciertos archivos o rutas que están en la lista negra. Los scripts también se ejecutan utilizando un modelo similar: todos los archivos .php son ejecutables por el servidor web, excepto los de la lista negra.
ASP.NET se configura de la misma forma en IIS: los archivos * .aspx son, de manera predeterminada, ejecutables desde cualquier directorio, y se supone que uno debe incluir en una lista negra de directorios como una ubicación pública de "cargas" para evitar vulnerabilidades.
No sé sobre otros servidores web, pero en IIS es totalmente posible cambiar esto, eliminando todas las asignaciones de controladores y luego enlistando archivos / rutas muy específicos. Dada una base de código bien estructurada, uno puede tener solo dos asignaciones de este tipo: una asignación única para un "/ public /" para ser atendida por StaticFileHandler, y otra asignación que asigna "/index.php" - y nada else - al FastCgiModule. Para ASP.NET, es un poco más de trabajo, pero si esto fuera un objetivo , las herramientas podrían escribirse en los archivos .aspx de la lista blanca durante la implementación, de modo que no se podrían ejecutar otros archivos .aspx, sin importar donde están ubicados.
Permitir todo y luego tratar de tapar los orificios es seguramente uno de los "no-no" de seguridad 101. ¿Por qué es tan omnipresente en las configuraciones de servidores web?