Nel mio file di configurazione di Apache, sto attualmente bloccando agenti utente potenzialmente maliziosi usando la seguente configurazione:
SetEnvIfNoCase User-Agent "^\W" badagent
<Location />
Deny from env=badagent
</Location>
Ciò negherà tutte le richieste con un agente utente che inizia con qualsiasi cosa tranne a-Z o 0-9. Viene visualizzato un errore Proibito 403.
Vorrei cambiare la mia configurazione per poter fornire un 403 ErrorDocument diverso per diversi motivi di blocco.
Sono consapevole che potrebbe non essere sempre una buona idea comunicare a qualcuno l'esatto motivo di sicurezza per il blocco della richiesta, ma è nel caso in cui un utente legittimo abbia bloccato la richiesta. Voglio che sappiano qual è il problema invece di vedere solo uno standard 403. Se qualcuno sta attaccando il mio sito, molto probabilmente sanno perché la loro richiesta viene bloccata.
Ad esempio:
Request blocked due to malformed user agent.
Request blocked due to disallowed request method.
Request blocked due to hotlinking.
Per fare questo, devo usare le istruzioni If nella mia configurazione:
<If "%{HTTP_USER_AGENT} == '^\W'">
ErrorDocument 403 "403 Forbidden - Request blocked due to malformed user agent."
Require all denied
</If>
La mia preoccupazione è che la variabile HTTP_USER_AGENT potrebbe essere utilizzata per l'iniezione di comandi. Ho eseguito commix su un server di test offline con questa configurazione e non ha rilevato nulla, ma voglio essere sicuro.
Ho faticato a trovare documentazione conclusiva su se / come Apache disinfetta le variabili da una richiesta HTTP.
Ho un semplice sito HTML / CSS, nessun PHP o qualcosa del genere. Installazione standard di Apache con varie configurazioni di hardening e moduli non necessari disabilitati.
L'istruzione If utilizzata in precedenza potrebbe essere vulnerabile al comando di iniezione e, in tal caso, come proteggerla?