Injeção de Código em Sites… Cuidado!!!

Uma pratica que está se tornando comum hoje em dia é a injeção de código externo [maliciosos] em sites, o que já existe há tempos mas com o aumento dos crackers e spammers o seu uso está proliferando.

Afinal o que é, e como pode ser caracterizada a injeção de código:

“Uso de um serviço disponível em um sistema para executar comandos e ações não previstas pelo desenvolvedor, p.ex. Comando arbitrários, cópia de arquivos, acesso a diretórios e arquivos.”

A pessoa mal intencionada deve contar com uma série de fatores para ser bem sucessida na inclusão do código (malicioso ou não) em seu site, entre elas deve: conhecer o tipo de serviço fornecido, a(s) linguagen(s) de programação utilizada(s), criatividade e sorte.

Quais os tipos?

Existem várias formas, abaixo as mais comuns:

  • Injeção de HTML e JavaScript
  • Injeção de SQL
  • Injeção de PHP
  • Injeção de HTTP
  • Injeção de e-mail(SMTP)
  • Injeção de inclusão de arquivos
  • Injeção de Shell

Como ocorre a injeção?

Vou exemplificar abaixo 2 formas mais comuns e simples.

1. Campos de formulário (Injeção de HTML, Javascript, Php)
Suponha que no seu site tenho um campo de pesquisa que aguarda o envio de uma string para realizar a busca e o “usuário” ao invés de inserir uma string qualquer para busca insere um código que pode ser interpretado pelo programa/linguagem de programação.

Quando o programa recebe a string injetada e vai executar os comandos de pesquisa, na verdade estará executando o código injetado “sem saber”.

2. Links de entrada (Injeção de Php)
Por exemplo seu site usa a seguinte estrutura de links:
http://www.seusite.com.br/index.php?pagina=sobre, neste caso a variavel sobre será lida pelo seu código para ser incluida no site, este tipo de estrutura é muito usado na montagem de templates em php, o valor da variavel página é o nome do arquivo a ser incluido.

Como prevenir estes ataques?

  • Não confie no usuário;
  • Sempre filtre o que for passado como entrada para o seu programa antes de utiliza-lo.
  • Não permita a inclusão de caracteres especiais e tags;
  • Usar codificação de entrada e saída;
  • Utilizar escape de caracteres perigosos;
  • Não mostrar o conteúdo do banco de dados ao ser gerado um erro;
  • Não utilizar scripts de validação somente no lado do cliente;

Solução para os dois exemplos apresentados:

1º No primeiro caso você deve usar o escape de caracteres perigosos, e uma expressão regular para validar os dados de entrada, neste caso o código usado irá depender de como seu código usará a string recebida, sugiro ver os links no final do post.

2º Aqui você pode trabalhar com a técnica de White List e gerar uma lista das páginas que podem ser acessadas, exemplo:

$paginasperm = array (

 inicio => 'inicio',

 sobre => 'sobre',        

 contato => 'contato'    

 );

$pagina=$_GET['pagina'];

 if (empty ($pagina)) {

 $pagina='inicio';

 include_once "$pagina".".php";    

 } else {

 if (array_key_exists($pagina, $paginasperm)) {

 include_once "$pagina".".php";                

 } else {

 echo '<h1>404 - Não Encontrado</h1>

 <p>A URL requisitada não foi encontrada neste servidor.</p>

 <hr>';

 }

 }

Fonte: http://www.matped.com/2009/07/injecao-codigo-paginas-php/

Para entender melhor:

http://www.f5networks.com.br/pdf/white-papers/injecao-de-sql-deteccao-de-evasao-wp.pdf

https://disciplinas.dcc.ufba.br/pastas/MATA87/2008.1/InjecaoDeCodigo/ic.ppt

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s