PHP: Função Anti-SQL Injection
PHP: Função Anti-SQL Injection

Olá Galera, hoje vamos falar sobre outro assunto muito importante para desenvolvedores PHP, que é a segurança e a prevenção de fraudes, invasões e outros males que são causados por SQL Injection.
Mas o que é o tal “SQL Injection” ?? Bom, vamos a explicação então…

SQL Injection (ou Injeção de SQL) trata-se da manipulação de uma instrução SQL através das variáveis que compõem os parâmetros recebidos por um script, tal como PHP, ASP, JSP, ColdFusion, etc.
O principal motivo pelo qual deve-se impossibilitar a utilização da SQL Injection está no fato de que, através de uma simples instrução SQL, como por exemplo, uma projeção de dados, outras operações podem ser executadas, podendo impactar sobre o esquema das tabelas, os dados armazenados, e até mesmo sobre elementos do sistema operacional, tendo em vista que alguns bancos de dados permitem a execução de comandos do shell do próprio sistema operacional, na maioria dos casos, SQL Injection são utilizados para logar em sistema, ou causar danos a tabelas do Banco de Dados. (Descrição de SQL Injection clipada do site iMasters)

Vamos então a uma função que encontrei em pesquisas na Internet, e adaptei ela, inclui alguns parâmetros, etc, para que assim ela ficasse mais completa e funcional. Essa função pode ser utilizada a qualquer momento em seu script PHP para filtrar/limpar algum dado proveniente de formulários/seções/cookies, afinal existem diversos métodos utilizados para as fraudes. Lembrando que esse script é apenas um exemplo prático, de uma das formas de prevenir a SQL Injection, pois existem inumeras ações que podemos realizar para prevenir.

Como o sistema do WordPress que é o script de Blog que utilizamos possui um sistema de SQL Injection, não tenho como inserir os códigos aqui, como em outros artigos sobre PHP, então para utilizar a função, você terá de fazer download do arquivo com a função Anti-SQL Injection e exemplo de uso clicando aqui.

15 de maio de 2008
Categoria(s): Banco de Dados, MySQL, PHP
Faça sua parte, divulgue o Post !!
  • Twitter
  • Google Buzz
  • Digg
  • Delicious
  • Stumbleupon
  • Technorati
  • Reddit
  • Facebook
  • LinkedIn
  • E-mail
Você pode gostar de ver:
Sobre o Autor
Rodrigo Luis
Trabalho com desenvolvimento WEB há cerca de 10 anos, e com programação em PHP há cerca de 10 anos. Tenho conhecimento em diversas linguagens, mas meu domínio é especifico em PHP, JavaScript, CSS e HTML/XHTML, tenho algum conhecimento em MySQL. Além disso é claro, tenho domínio sobre ferramentas gráficas como Adobe Fireworks e Photoshop, e CorelDRAW. Sou um fã de Tecnologia de tudo que é tipo, seja relacionada a internet ou mesmo a tecnologia de hardware. Minha formação acadêmica é na área de Publicidade e Propaganda.
Exibir Pingbacks/Trackbacks
Comentários (13)
Exibir Comentários
Pingbacks/Trackbacks (0)
  • Mayko disse:

    É…
    Injeção SQL é um caso sério.
    Uso uma função aqui há tempos já para proteção, mas vou dar uma conferida nessa!

    Ótimo post, vlw!!

    []‘s

    quinta-feira, 15 de maio de 2008 às 17:05
  • Vinicius disse:

    É uma pena que esse arquivo não esteja mais disponivel para download. Será que tem como postar novamente?? Agradeço.

    quarta-feira, 01 de julho de 2009 às 7:11
    • Rodrigo Luis disse:

      Olá Vinicius, já atualizei o link com o arquivo novamente para download. Desculpe este problema, mas foi algo que aconteceu no EasyShare, que era onde o arquivo estava armazenado.

      quarta-feira, 01 de julho de 2009 às 8:49
  • luciano disse:

    Eu fiz download do arquivo. Agora gostaria de saber como colocar na prática? e que sou inciante em programação para web, e meu site ja foi invadido por sql injection.

    sexta-feira, 17 de julho de 2009 às 23:53
    • Rodrigo Luis disse:

      Olá Luciano, para utilizar o script, você deve seguir o modelo de exemplo que está no script.

      segunda-feira, 20 de julho de 2009 às 11:17
  • luiz disse:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function anti_injection($sql)
    {
    // remove palavras que contenham sintaxe sql
    $sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);
    $sql = trim($sql);//limpa espaços vazio
    $sql = strip_tags($sql);//tira tags html e php
    $sql = addslashes($sql);//Adiciona barras invertidas a uma string
    return $sql;
    }

    //modo de usar pegando dados vindos do formulario
    $nome = anti_injection($_POST["nome"]);
    $senha = anti_injection($_POST["senha"]);

    ?>
    segunda-feira, 26 de abril de 2010 às 2:01
  • Rodrigo Luis disse:

    Parabéns Luiz,

    Excelente função anti sql-injection.

    segunda-feira, 26 de abril de 2010 às 9:10
  • rubson disse:

    trabalho na area técnica de projeto.
    alguém usa o qcad ?
    eu o utilizo a um bom tempo no linux
    gostaria de trocar impressões.
    ok.

    sexta-feira, 07 de maio de 2010 às 11:03
  • leandro disse:

    rodrigo to usando seu cod anti injection e to recebendo o erro Fatal error: Call to undefined function anti_sql() in C:wampwwwsitioadmverifica.php on line 51

    <?
    function anti_sql($texto){
    // Lista de palavras para procurar
    $check[1] = chr(34); // símbolo "
    $check[2] = chr(39); // símbolo '
    $check[3] = chr(92); // símbolo /
    $check[4] = chr(96); // símbolo `
    $check[5] = "drop table";
    $check[6] = "update";
    $check[7] = "alter table";
    $check[8] = "drop database";
    $check[9] = "drop";
    $check[10] = "select";
    $check[11] = "delete";
    $check[12] = "insert";
    $check[13] = "alter";
    $check[14] = "destroy";
    $check[15] = "table";
    $check[16] = "database";
    $check[17] = "union";
    $check[18] = "TABLE_NAME";
    $check[19] = "1=1";
    $check[20] = 'or 1';
    $check[21] = 'exec';
    $check[22] = 'INFORMATION_SCHEMA';
    $check[23] = 'like';
    $check[24] = 'COLUMNS';
    $check[25] = 'into';
    $check[26] = 'VALUES';

    // Cria se as variáveis $y e $x para controle no WHILE que fará a busca e substituição
    $y = 1;
    $x = sizeof($check);
    // Faz-se o WHILE, procurando alguma das palavras especificadas acima, caso encontre alguma delas, este script substituirá por um espaço em branco " ".
    while($y

    <?php

    $apelido = anti_sql($_POST["apelido"]);
    $senha = anti_sql($_POST["senha"]);

    $selecao = mysql_query("SELECT * FROM admin WHERE apelido = '$apelido' AND senha = '$senha' ") or die (mysql_error());

    $row = mysql_fetch_array($selecao);

    if ($row == "")
    {
    echo "apelido e/ou senha inválidos.”;
    echo “”;
    echo “Voltar”;
    exit;
    }
    else
    {
    session_start();

    $_SESSION["apelido"] = $apelido;

    header (“location:index.php”);
    }

    mysql_close($conexao);
    ?>

    terça-feira, 11 de maio de 2010 às 16:28
  • 10°

    Rodrigo Luis disse:

    Olá Leandro,
    Verifique seu código, pois o mesmo tem erros de script, exemplo, tem um while pela metade, sem o resto das especificações, tem a abertura da tag de script php no meio de um script, bem proximos a linha 51 que você reportou o problema.

    terça-feira, 11 de maio de 2010 às 17:19
  • 11°

    b disse:

    Só pra acrescentar aqui.
    Vocês não precisam chamar esta função cada vez que há um input. Isso dá um trabalho do cão.

    Utilize um require_once() para incluir a função em todas as páginas do site.

    Em seguida, basta limpar todo input usando:

    $_POST = anti_injection($_POST);
    $_REQUEST = anti_injection($_REQUEST);
    $_COOKIE = anti_injection($_COOKIE);
    $_SESSION = anti_injection($_SESSION);

    Muito mais simples né?
    Outra coisa interessante é o uso do PDO para manipular a base de dados.

    Espero ter contribuído.

    quinta-feira, 07 de abril de 2011 às 9:21
  • 12°

    FranChasing disse:

    Olá, galera !

    Estou com problemas de sql injection e não estou conseguindo resolver, gostaria de contar com ajuda de vocês !

    Por favor, acessem estes dois links e vejam onde aplicar a vacina contra o sql injection.

    http://www.sindsasc.org/protecao/conexao.txt
    http://www.sindsasc.org/protecao/exibe_agenda.txt

    Muito grato !!!

    domingo, 11 de dezembro de 2011 às 14:28
    • 13°

      Rodrigo Luis disse:

      Olá FranChasing,

      Bom, em primeiro lugar explique melhor qual o problema que você está tendo para que eu possa entender.
      Mas de cara já vi que possivelmente você está tendo problemas por usar uma variável simples definida num arquivo de include para tabelas, se quiser usar assim, o ideal seria utilizar CONSTANTES, e outra, variáveis recebidas por POST ou GET para usar em querys no banco devem ser passadas antes numa função de SQL Injection como essa que está disponível aqui no artigo.

      domingo, 11 de dezembro de 2011 às 19:51
  • Este post não possui Pingbacks/Trackbacks

Escreva um Comentário

Blog webARTz: Onde a WEB encontra a ARTE

2008~2012 Blog webARTz // Powered by Wordpress // Hospedado na KingHost // Desenvolvido por: Agência BBD
Fechar
Voltar ao Topo
Atenção !!
Nosso blog passou por grandes mudanças e melhorias na estrutura, recursos e conteúdo.

Estas alterações podem causar dificuldade na navegação, por este motivo alguns bugs e/ou problemas podem ocorrer. Caso isso ocorra pedimos que você nos notifique pelo "Fale Conosco" aqui do blog.

No momento estamos trabalhando para o perfeito funcionamento
do blog.

Obrigado !!
Fechar
Abrir Aviso