Evitando SQL Injection

Publicado por Ronaldo Lidio em 29/11/2006

[ Hits: 15.022 ]

 


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

Como gravar uma ISO no pendrive/USD externo

urpmi - Comandos básicos no Mageia Linux

Compartilhamento simples de arquivos com Samba no CentOS 6.4

Criar, alterar e remover usuários no Squid

Conversão de decimais em binários e vice-versa

  

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