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:
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
Você pode achar interessante:
Como verificar se o navegador é o Ie6 e redirecionar
(In)compatibilide de sites no Internet Explorer 8







estas dicas realmente funcionam,muito obrigado