webARTz - Onde a WEB encontra a ARTE

Cadastre-se no Mercado Livre, clique aqui !!
15 mai
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.

Categorias:
Banco de Dados MySQL PHP

Comentários (14)

Trackbacks/Pingbacks (0)

  • Mayko escreveu:

    Responder

    É…
    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 escreveu:

    Responder

    É 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 escreveu:

      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 www.webartz.com.br
  • luciano escreveu:

    Responder

    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 escreveu:

      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 www.webartz.com.br
  • luiz escreveu:

    Responder
    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 escreveu:

    Responder

    Parabéns Luiz,

    Excelente função anti sql-injection.

    segunda-feira, 26 de abril de 2010 às 9:10 www.webartz.com.br
  • rubson escreveu:

    Responder

    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 www.eletricamg.com.br
  • leandro escreveu:

    Responder

    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 escreveu:

    Responder

    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 www.webartz.com.br
  • 11ºb escreveu:

    Responder

    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 escreveu:

    Responder

    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 www.sindsasc.org
    • 13ºRodrigo Luis escreveu:

      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 www.webartz.com.br
  • 14ºRobbie Snizzer escreveu:

    Responder

    Obgd tava com problemas nessa funçao ajudou muito continuem postando sempre Valeu

    sexta-feira, 20 de julho de 2012 às 17:55 www.street-angelmusik.tk
  • Este post ainda não possui Pingbacks ou Trackbacks

Faça seu Comentário

webARTz - Onde a WEB encontra a ARTE

Free Page Rank Tool Visitantes Online Server Monitor Spam Poison Creative Commons License
Contribuindo na Web desde Março de 2008| Powered by Wordpress.org| Hospedado na KingHost| Fundado por Rodrigo Luis e Anderson Backes
Voltar ao Topo