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.







10 Melhores dicas para WordPress
Nova colunista acaba de chegar para falar de WordPress
Grátis: API de CEPs para qualquer Linguagem
CodeIgniter e Zend – Frameworks PHP
Confira o Podcast webARTz, com vários assuntos abordados aqui no blog. Utilize os links abaixo para baixar os arquivos.



Comentários (14)
Trackbacks/Pingbacks (0)
1ºMayko escreveu:
É…
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
2ºVinicius escreveu:
É uma pena que esse arquivo não esteja mais disponivel para download. Será que tem como postar novamente?? Agradeço.
3º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.
4ºluciano escreveu:
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.
5ºRodrigo Luis escreveu:
Olá Luciano, para utilizar o script, você deve seguir o modelo de exemplo que está no script.
6ºluiz escreveu:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
// 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"]);
?>
7ºRodrigo Luis escreveu:
Parabéns Luiz,
Excelente função anti sql-injection.
8ºrubson escreveu:
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.
9ºleandro escreveu:
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);
?>
10ºRodrigo Luis escreveu:
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.
11ºb escreveu:
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.
12ºFranChasing escreveu:
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 !!!
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.
14ºRobbie Snizzer escreveu:
Obgd tava com problemas nessa funçao ajudou muito continuem postando sempre Valeu