Evitando SQL Injection

Publicado por Ronaldo Lidio em 29/11/2006

[ Hits: 15.221 ]

 


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.

Outras dicas deste autor

Terminal do root colorido

Leitura recomendada

Configurando suporte ao PHP no Eclipse

Linguagens de Programação - Apenas uma é o suficiente?

Modem HSP56MR - Smartlink no Ubuntu 7.04

Katapult - Lançador de aplicativos KDE

Plymouth: Temas para Gentoo/Funtoo

  

Comentários
[1] Comentário enviado por th1nk3r em 12/06/2008 - 18:53h

Boa..!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts