Segurança com PHP II – PHP Injection

Olá pessoal ! Seguindo a sequência deste assunto relacionado a segurança com PHP, hoje falaremos no PHP Injection!

Clique aqui e veja o primeiro artigo: Segurança com PHP I – SQL Injection

DEFINIÇÃO/FORMA DO ATAQUE

O PHP Injection é semelhante ao ataque de SQL Injection, só que este tipo de ataque resume-se em passar informações por querystring (parâmetros da URL), comandos em PHP e/ou endereços de arquivos que serão interpretados e executados por seu script.

Muuuuiittooos sites por aí utilizam URL’s deste tipo para deixar seu conteúdo e estrutura dinâmicas:

http://www.sitevulneravel.com.br/index.php?page=novidades.php
http://www.sitevulneravel.com.br/index.php?page=paginas/views/novidades

O script responsável pelo carregamento da página faria a leitura do parâmetro page semelhante a isso:

Desta forma, o que estiver vindo do parametro page será incluído dentro do corpo sua página, inclusive se colocarmos algo desse tipo:

http://www.sitevulneravel.com.br/index.php?page=http://www.siteconcorrente.com.br/logo-do-cliente.jpg

http://www.sitevulneravel.com.br/index.php?page=http://www.siteporno.com.br/uma-imagem-muito-tensa-de-sexo.jpg

http://www.sitevulneravel.com.br/index.php?page=http://www.hacker.com.br/scriptmalicioso.php

Se o parâmetro safe_mode do PHP.ini estiver desabilitado (Off) e o parâmetro allow_url_include estiver habilidado (On), que não é algo incomum, a função include do seu script irá executar normalmente o que está nos parâmetros page, e daí o céu é o limite para o atacante.

PELAS BARBAS DO PROFETA, E AGORA ?

Como disse no primeiro artigo:

“Sempre trate informações vindas do usuário (Escapar entradas) e formate as saídas.”

Claro que só desativando o parâmetro allow_url_include no seu servidor WEB irá resolver o problema, porém, nem todos os servidores de hospedagem permitem que o você (cliente) altere as configurações do servidor, portanto, temos várias formas de contornar esse tipo de ataque, irei mostrar uma forma simples:

Foi criado uma variável $pagina, apenas para verificar se o parâmetro page existe e se o mesmo não está vazio. Logo após, verificamos se o arquivo solicitado existe (usando a função file_exists) dentro do diretório das minhas páginas.

Desta forma eu garanto que somente as minhas páginas, no meu servidor web, serão executadas dentro no corpo do meu site/sistema.

E é com essa dica de segurança no desenvolvimento WEB com PHP que termino esse artigo relacionado a PHP Injection, agora vocês já sabem como se prevenir de ataques PHP Injection.

Um forte abraço a todos e até o nosso próximo tópico de Segurança com o PHP.

Kilderson Sena

Empreendedor, Experiente Analista e Desenvolvedor de Sistema e Líder de Equipes. Micro Empresário no ramo de Tecnologia, mas precisamente nos mercados de Desenvolvimento WEB, Desktop e Mobile.

Deixe uma resposta

This site uses Akismet to reduce spam. Learn how your comment data is processed.