Tecnologia
Ernani Azevedo (PROCERGS – DPO/SAS Unix)
Revisão 1.2 – 19 de Abril de 2007
1 – Introdução A linguagem PHP, por ser muito flexível, normalmente é utilizada de forma insegura, tanto pelo desenvolvedor quanto pelos administradores de servidores de hospedagem. Existem diversas vulnerabilidades conhecidas, a sua grande maioria é de domínio público, facilmente encontradas na Internet. Muitos sites possuem material que ensinam como explorar estas falhas. É comum vermos em registros de acessos a servidores públicos, que utilizam PHP, tentativas de explorar estas falhas. Por tal motivo, este documento serve como um guia para desenvolvedores e administradores. O intuito deste é criar uma cultura de desenvolvolvimento seguro. Passaremos pelos problemas conhecidos enfatizando a forma que os mesmos são comumente utilizados, explorados e como escrever o mesmo código de forma simples e segura e a sua forma ideal. Note-se também que estas regras de programação não são utilizadas apenas para segurança, mas para criar sistemas em PHP que sejam extremamente portáteis entre diversas plataformas e diferentes estruturas de servidores, desde o mais genérico ao mais seguro.
1.1 - Convenções utilizadas neste documento As seguintes convenções são utilizadas neste documento: Texto plano Documentação normal.
Texto reduzido
Indica segmentos incompletos de códigos para exemplo. Itálico Termos em inglês originais sem tradução. Negrito Variáveis. Negrito Itálico 1
Funções de programação. Sublinhado Links para URL's da Internet.
2 – Vulnerabilidades As vulnerabilidades mais comuns no PHP são:
• • • • • •
Cross-site Scripting; SQL Injection; Inclusão de valores em variáveis internas; Exposição de informações do servidor (mensagens de erro); Exposição de arquivos do sistema e outros do servidor; Execução de programas no servidor.
Existem diversas outras regras e funções que devem ser desabilitadas em servidores para uma maior segurança. Estas configurações são