Pular para o conteúdo

Evitando SQL Injection

Dica publicada em Linux / Introdução
Ronaldo Lidio bad_feelings
Hits: 15.893 Categoria: Linux Subcategoria: Introdução
  • Indicar
  • Impressora
  • Denunciar

Evitando SQL Injection

O que é SQL injection?


É conhecido pelo método utilizado para inserir, apagar, editar, entre várias outras funções SQL em ataques a banco de dados através de formulários do tipo texto e password, onde o atacante poderá inserir um usuário em sua tabela do banco de dados, dando-o permissão para acessar todo o sistema ou por exemplo, dar um delete em toda sua tabela e apagar todos os dados contidos nela .

Como evitar?


O PHP hoje conta com uma rica biblioteca onde encontramos alguns métodos para nos auxiliar nessa operação.

Iremos utilizar:
  • preg_replace() - Substitui uma determinada string por outra;
  • sql_regcase() - Embora pouco utilizada e conhecida, esta função pega todos os caracteres da nossa string e passa para maiúscula e minúscula, assim não tem como diferenciar SELECT de select, ele vai detectar mesmo assim;
  • trim() - O trim() limpa espaços vazios da string;
  • strip_tags() - Remove tag html da nossa string;
  • addslashes() - Adiciona barras invertidas à variável.

Você poderá encontrar mais sobre estes e mais métodos ou funções ("programação estruturada") no próprio site do PHP:
Vamos realmente ao que nos interessa, iremos criar nossa function para fazer esse trabalho.

function removerSql($Variavel) { //Iniciamos nossa function passando uma variável de parâmetro

// Remove o código SQL inserido no ataque e troca por espaços em branco
$Variavel = preg_replace(sql_regcase("/(from|select|insert|name|like|delete|where|drop table|show tables|#|*|--|\\\\)/"),"",$Variavel);

// Limpa os espaços vazios
$Variavel = trim($Variavel);

// Remove tags html que também podem danificar o layout do site
$Variavel = strip_tags($Variavel);

// Adiciona barras invertidas a uma string
$Variavel = addslashes($Variavel);

// Retorna o resultado da nossa function
return$Variavel;
}

Iremos observar que em nosso resultado final só aparecerá teste de SQL injection onde as palavras adicionadas em preg_replace serão todas removidas.

echo ant_sql("Select teste de sql injection");

Código pronto para o uso:

function ant_sql($Variavel) {

       $sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|*|--|\\\\)/"),"",$Variavel);
       $sql = trim($Variavel);
       $sql = strip_tags($Variavel);
       $sql = addslashes($Variavel);
          
         return $Variavel;
            
} echo ant_sql("Select teste de sql injection");

Espero ter ajudado a todos que encontram dificuldades para remover código inseridos em um simples formulário de login.

Terminal do root colorido

Backup do Outlook de uma estação com Windows XP

Slackware em modo texto - Apagão na tela durante inicialização

Backup em HD slave no Linux

Entrando no mundo Open Source

Servidor VNC no Fedora

#1 Comentário enviado por th1nk3r em 12/06/2008 - 18:53h
Boa..!

Contribuir com comentário

Entre na sua conta para comentar.