En mi archivo de configuración de Apache, actualmente estoy bloqueando agentes de usuarios potencialmente malintencionados utilizando la siguiente configuración:
SetEnvIfNoCase User-Agent "^\W" badagent
<Location />
Deny from env=badagent
</Location>
Esto rechazará todas las solicitudes con un agente de usuario que comience con cualquier cosa excepto a-Z o 0-9. Se muestra un error 403 Prohibido.
Me gustaría cambiar mi configuración para poder proporcionar un documento de error 403 diferente por diferentes motivos de bloqueo.
Soy consciente de que no siempre es una buena idea decirle a alguien la razón exacta de seguridad para bloquear su solicitud, pero esto es solo en caso de que un usuario legítimo tenga su solicitud bloqueada. Quiero que sepan cuál es el problema en lugar de solo ver un estándar 403. Si alguien está atacando mi sitio, es muy probable que sepan por qué se está bloqueando su solicitud.
Por ejemplo:
Request blocked due to malformed user agent.
Request blocked due to disallowed request method.
Request blocked due to hotlinking.
Para hacer esto, debo usar sentencias If dentro de mi configuración:
<If "%{HTTP_USER_AGENT} == '^\W'">
ErrorDocument 403 "403 Forbidden - Request blocked due to malformed user agent."
Require all denied
</If>
Mi preocupación con esto es que la variable HTTP_USER_AGENT podría usarse para la inyección de comandos. Ejecuté commix en un servidor de prueba fuera de línea con esta configuración y no detectó nada, pero quiero estar seguro.
Luché para encontrar cualquier documentación concluyente sobre si / cómo Apache elimina las variables de una solicitud HTTP.
Estoy ejecutando un sitio web HTML / CSS simple, sin PHP ni nada de eso. Instalación estándar de Apache con varias configuraciones de endurecimiento y módulos innecesarios deshabilitados.
¿Podría la instrucción If utilizada anteriormente ser vulnerable a la inyección de comandos, y si es así, cómo me protejo?