Dica curta: Ligando/Desligando a register_globals (PHP) por domínio virtual

Para os programadores PHP mais experientes pode parecer piada, mas é bem comum encontrarmos aplicações sendo desenvolvidas atualmente (nada de código legado… projetos novos) da mesma maneira que se programava lá atrás, com PHP3 ou anterior –  com a famigerada diretiva register_globals ligada. Para resumir a ópera aos programadores de primeira viagem, este método de desenvolvimento trás sérios riscos em termos de segurança à sua aplicação e possibilita a interceptação ou fraude dos dados entre o seu formulário e o CGI que vai processá-lo (mesmo usando o método Post). Leia mais sobre  porque não utilizar a diretiva register_globals = on neste artigo.

Para se ter uma idéia, a partir da versão 6.0, os desenvolvedores do PHP decidiram eliminar completamente a possibilidade de se utilizar a diretiva register_globals como “on” (ainda me pergunto o que vai acontecer com os sites e outras aplicações legadas quando os servidores começarem a ser atualizados – no Brasil acho que a web vai parar! :)). Administradores de sistemas/redes mais atentos e preocupados com a segurança do seu ambiente computacional sempre mantém o PHP rodando com esta diretiva desligada. Contudo, não raras vezes, precisamos “conviver” com códigos antigos ou mal projetados e, neste caso, não temos opção se não ligarmos a register_globals (afinal, os usuários não sobrevivem sem estas aplicações e elas não funcionam sem o “on” da diretiva).

Já que o mal é inevitável as vezes, podemos ao menos amenizar os estragos setando a register_globals = on apenas para aquelas aplicações onde não se tem outra alternativa. Isso é perfeitamente possível com a configuração do Apache por domínio virtual. Não abordarei nesta dica como configurar o Apache para hospedar várias aplicações/sites (em diretórios separados no servidor).  Se esta é sua dúvida, sugiro que leia este excelente artigo do GDH.

Uma vez que a aplicação problemática esteja devidamente “isolada” em seu domínio virtual no Apache, basta criar (se já não existir, é claro) o arquivo .htaccess no respectivo diretório (/var/www/aplicacao – supondo que seu servidor seja movido à Linux e o Apache esteja na versão 2.x) setando o register_globals apenas para ela. Para tanto, insira ou acrescente a seguinte linha ao arquivo .htaccess:

php_flag register_globals On

Pronto, agora basta manter no seu php.ini a register_globals = off. O Apache vai entender a diretiva sempre desligada como padrão e ligada quando o usuário estiver acessando a aplicação específica (/var/www/aplicacao). 😉