IIS | Bloquear la ejecución de archivos en el directorio

IIS | Bloquear la ejecución de archivos en el directorio

Estoy lidiando con cargas de usuarios a través de una aplicación PHP.

Quiero proteger el servidor para que no haya exploits disponibles para el usuario, como cargar un shell php y ejecutarlo.

Lo configuré para que todas las cargas se muevan fuera de webroot a una carpeta separada. Como seguridad adicional, he eliminado todos los derechos excepto "leer" del IUSR, en la carpeta específica.

Para llevar esto un paso más allá, me dijeron que deshabilitara la ejecución del script en la carpeta a través de IIS.

¿Es esto necesario, dada mi situación y las cosas que ya he hecho? En caso afirmativo, ¿cómo podría lograrlo utilizando IIS 8?

Gracias

Respuesta1

La respuesta a la pregunta "¿es esto necesario?" es que debemos examinar el nivel de seguridad que se requiere para esta aplicación y su organización.

Las mejores prácticas de seguridad abogan por el enfoque de "Defensa en profundidad", lo que significa que la seguridad es una superposición de controles de seguridad para proteger la información (u otros) activos.

Para determinar si estos datos necesitan control adicional, evalúe el riesgo (qué probabilidades hay de que exista una amenaza que pueda explotarse y cuál es el impacto de que estos datos/sistema se vean comprometidos); piense no solo en la confidencialidad de los datos. , sino un usuario malintencionado que cambia los datos o desactiva el sistema o elimina los datos. Luego determine si el costo del control excede el beneficio de implementar el control. Si no se implementa el control, si es más "caro" implementar el control, se acepta el riesgo.

Denegar el acceso a scripts en un directorio virtual es algo bastante trivial de implementar y sería una capa de defensa contra un usuario malintencionado que pudiera elevar sus permisos. Es común implementar este control para que los archivos cargados en un directorio no puedan ejecutarse, por ejemplo. para obtener un caparazón remoto. Entonces, si el "costo" es trivial y asumimos que obtener un shell remoto tendría un alto impacto, incluso si es de baja probabilidad, entonces la respuesta sería deshabilitar la ejecución del script en la carpeta (siéntete libre de tomar tu propia decisión aquí si no estoy de acuerdo con esta evaluación).

Para deshabilitar el acceso al script en la carpeta en IIS 8, el procedimiento debe ser el mismo que en IIS 7, configurar las asignaciones de controladores en web.config.

Este enlace explica varias opciones:

https://webmasters.stackexchange.com/questions/28733/prevent-iis-from-executing-scripts-in-a-specific-directory

Probablemente esto es lo que desea, lo que preservará el controlador de archivos estáticos:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <clear />
            <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
        </handlers>
    </system.webServer>
</configuration>

Tenga en cuenta también el último comentario en esa página para la configuración requerida:

Solo para agregar a la solución publicada para otros que podrían tener el mismo problema: Ninguno de ellos funcionó para mí hasta que descubrí que los controladores estaban bloqueados en el nivel superior. No soy administrador de servidores ni siquiera estoy cerca de serlo, así que eso me tomó un poco de tiempo. Hasta que se editó el archivo applicationHost.config para permitir anulaciones, incluir incluso una sección vacía en un archivo web.config de nivel inferior era suficiente para dividir todo desde ese nivel hacia abajo. Aunque funciona muy bien ahora.

información relacionada