Recentemente, fui freqüentado por mensagens de erro erradas do mod_security. Seus conjuntos de filtros cobrem explorações desatualizadas do PHP, e eu tenho que reescrever minhas coisas porque o Wordpress & Co teve bugs anos atrás.
Isso acontece com mais alguém?
O Apache mod_security bloqueia solicitações HTTP possivelmente perigosas antes que elas atinjam aplicativos (PHP especificamente). Ele usa vários conjuntos de filtros, principalmente baseados em regex.
Então, eu tenho um bom provedor de hospedagem compartilhada, tecnicamente apto e outras coisas. Mas isso me incomodou:
Na semana passada, tive que alterar o nome de um parâmetro &src=
em um dos meus aplicativos porque o mod_security bloqueia QUALQUER solicitação com isso. Não procurei os detalhes, mas essa regra de filtro estava impedindo a capacidade de exploração de outro aplicativo que não uso e provavelmente nunca ouvi falar. Ainda assim, tive que reescrever meu código (mudar o nome do parâmetro geralmente é suficiente para enganar mod_security), o que não tinha nada a ver ou em comum com isso!
E hoje, um regex bobo bloqueia envios de formulários, porque eu queria enviar código de exemplo php. Dado, este é o material simples que o mod_security existe para se proteger. Mas eu não acredito que o mod_security possa detectar código seriamente ofuscado, e apenas dispara em trechos de php óbvios (e neste caso totalmente triviais).
Basicamente, estou sendo penalizado pelo mod_security porque outras pessoas lançaram aplicativos propensos a erros. (Não estou dizendo que meus aplicativos são ultra seguros - eu sou bastante cauteloso em segurança, mas não faço reivindicações hiperbólicas.)
Eu já pedi ao meu provedor para desativá-lo de qualquer maneira, os benefícios são IMO muito negativos e para meus aplicativos.
O que você acha? O mod_security faz muito sentido fora da hospedagem WP? Ou é realmente apenas um monte de listas negras de bugs de segurança passados? Quais de suas regras são realmente úteis? Existe um nível de aplicativo equivalente?
<?php doBadStuff(); ?>
não executa essa função. (A menos que você usaeval
é claro que é o mal de qualquer maneira.)