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.

0,,20834594-FMM,00

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:
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>';

 }

 }

Se quiser saber mais sugiro a leitura dos links abaixo:
Vulnerabilidades em Aplicações Web

http://www.owasp.org/index.php/Main_Page
http://pt2.php.net/strip_tags
http://pt2.php.net/htmlentities
http://pt2.php.net/mysql_real_escape_string
http://deathseeker25.wordpress.com/2006/12/28/sql-injection-breve-explicacao/
http://en.wikipedia.org/wiki/SHA_hash_functions
http://en.wikipedia.org/wiki/Advanced_Encryption_Standard
http://forum.imasters.uol.com.br/lofiversion/index.php/t276729.html

BlogBlogs.Com.Br





Você pode achar interessante:
Como verificar se o navegador é o Ie6 e redirecionar
(In)compatibilide de sites no Internet Explorer 8