Professional Documents
Culture Documents
Abril.com
PORTAL
AGENDA
MULTIMDIA
Grupo Abril
COLETIVOS
IMASTERS PRO
CODE
Abril Mdia
FRUM
Pgina 1 de 7
Distribuio
Grfica
Abril Educao
Assine
Loja
INTERCON 2011
PHP
PHP
WHITE PAPERS
ITIC Survey
Veja em relatrio ITIC por que clientes Oracle
esto insatisfeitos
Uma pesquisa revelou que 2 entre 10 clientes acham
pobre e insatisfatrio os produtos, servios e suporte
da Oracle.
LTIMAS NOTCIAS
10h25
13h20
CURSOS ONLINE
Se nenhuma outra validao for realizada, o usurio mal intencionado ter efetuado login
no sistema, sem ao menos informar um usurio contido na tabela. Isto foi possvel pois o
valor de entrada informado no recebeu o tratamento devido, sendo adicionado instruo
http://imasters.com.br/artigo/5179/php/sql_injection_no_php_o_que_e_e_como_se_pr... 17/08/2011
Pgina 2 de 7
tomadas. Algumas das aes sero realizadas no servidor de banco de dados, outras
Encontre-nos no Facebook
iMasters
Curtir
Com a utilizao da funo addslashes() ser adicionada uma barra invertida antes de
cada aspa simples e aspa dupla encontrada, processo conhecido como escape. Se a
diretiva de configurao do PHP magic_quotes_gpc estiver ativada, o escape realizado
automaticamente sobre os dados de COOKIES e dados recebidos atravs dos mtodos
Ricardo Luiz
Amauri
Alessandra
Sou Mais
Pedro
Deide
Jos
DjMark
Daniela
Patricia
GET e POST. Neste caso, no deve ser efetuado o tratamento com addslashes(). A
funo get_magic_quotes_gpc(), disponvel nas verses do PHP a partir da 3.0.6, retorna
a configurao atual da diretiva magic_quotes_gpc.
Abaixo, a query string resultante da aplicao do tratamento mencionado:
Hospede PHP na Hospedagem 2.0, suporte ao PHP 5.2 e 5.3. Experimente Grtis por 15 dias!
0
0
Like
Send
http://imasters.com.br/artigo/5179/php/sql_injection_no_php_o_que_e_e_como_se_pr... 17/08/2011
Pgina 3 de 7
Tiago Vailati bacharel em Cincia da Computao pela Univali (SC). Tem interesse nas reas
de software, web, bancos de dados, tambm administrao e empreendedorismo. Alm disso,
gosta de msica, ler, escrever, e acompanhar o mercado.
Pgina do autor
Email
Website
Leia os ltimos artigos publicados por Tiago Vailati
O que impede nossos projetos de seguirem em frente?
De mos dadas com a TI
Scrum: utilize linguagem de negcios no Product Backlog
Filosofia gil: Getting Real - Parte final
Filosofia gil: Getting Real - Parte 02
Filosofia gil: Getting Real - Parte 01
31 COMENTRIOS
COMENTE TAMBM
Diego A. Griep
J conhecia o assunto, mas sempre bom ler a viso de outras pessoas, bom se proteGer
do sql injection.
* Dica:
Quando for postar um artigo, tenha sempre um dicionrio ao lado.
[ ]'s
H 4 anos Responder
Rafael Capucho
Eu gostaria de saber se assim tambm possivel um Injection: WHERE senha = '".$senha."';
espero respostas, Obrigado.
H 4 anos Responder
Igor Escobar
Tem gente que gosta de voltar no tempo...
H 4 anos Responder
DANIEL MAFFIOLETTI
Sem dvida que este assunto importante para iniciantes. Existem vrios mtodos
relacionados!
H 4 anos Responder
Tiago Vailati
Pessoal, tudo certo? Como foi abordado no artigo, hoje em dia, o prprio PHP j possui
tratamento para dados recebidos via POST, GET e Cookies. Logo, a utilizao da SQL
Injection tem sido bastante dificultada. O artigo visa explanar sobre o conceito e como a SQL
Injection atua, por isso, foi tratada numa viso mais superficial.
H 4 anos Responder
http://imasters.com.br/artigo/5179/php/sql_injection_no_php_o_que_e_e_como_se_pr... 17/08/2011
Pgina 4 de 7
Larcio Crestani
Seria um pouco melhor um
<?
if(!isset($_POST['usuario']) || trim($_POST['usuario']) =='' || !isset($_POST['senha']) || trim
($_POST['senha'] =='')){
header('location:login.php');
exit;
}
else {
echo $_POST['usuario'];
echo $_POST['senha'];
};
?>
se chegar '' vazio, ele volta ai seno ele continua... um pouco mais lgico e precisa dea
verificao ON em magic_quotes_gpc no php.ini...
H 4 anos Responder
Anderson Cavalcante
Boa a matria,
So poucos os programadores que pensam na questo: "Segurana". Por isso tantas falhas.
Algo muito bom de utilizar, so as expresses regulares. Onde voc especifica o que o
campo poder aceitar de caracter. Neste caso, entraria de a-z, A-Z, 0-9. Nada mais do que
isso, dae no teria problema de substituir por contra barra para escapar o caracter. Por
exemplo, posso utilizar o caracter #, que iria comentar o restante do cdigo SQL ;)
Abraos
H 4 anos Responder
Thiago Ferreira
O artigo no trouxe nada de novo. Explicaes manjadas da web. Acho que preciso trazer
alguma coisa realmente nova ou nem escrever nada.
H 4 anos Responder
Admir Tomaz
Serve apenas para novatos, sendo que o perigo do injetion nem foi falado, o perigo quando
fica vulnervel a ter uma tabela toda deletada pelo "drop", at um "select" de uma busca mal
programada pode gerar uma perda enorme de dados.
H 4 anos Responder
Tiago Gouva
Outra maneira de "limitar" as entradas de dados utilizando typecast, convertendo assim
uma entrada obtida $_POST ou $_REQUEST em um tipo determinado.
Uma maneira : $codigo=(int) $codigo;
Outra pode ser:
settype($codigo,integer);
http://imasters.com.br/artigo/5179/php/sql_injection_no_php_o_que_e_e_como_se_pr... 17/08/2011
Pgina 5 de 7
Saudaes
H 4 anos Responder
Moacir Fernandes
Pelo que percebi, voc est dando o select validando o login e senha de escape, para que
serve ento o login e senha se no est sendo usado!
H 3 anos Responder
Daniel Neto
um complemento do firefox que possibilita injetar codigo em qualquer campo do formulario,
esta ferramenta muito usada por hackers, a ferramenta pode ser baixada aqui:
https://addons.mozilla.org/pt-PT/firefox/addon/6727
H 3 anos Responder
Leo Baiano
Concordo com o Leonardo, eu tambm acho que o mysql_real_escape_string() uma
soluo mais atual e melhor para proteo contra sql injection.
Normalmente utilizo a seguinte funo:
function anti_sql_injection($string){
$string = get_magic_quotes_gpc() ? stripslashes($string) : $string;
$string = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($string) :
mysql_escape_string($string);
return $string;
}
H 1 ano Responder
Responder
thiago
duvido alguem derrubar meu banco.
dou 10000
H 11 meses Responder
http://imasters.com.br/artigo/5179/php/sql_injection_no_php_o_que_e_e_como_se_pr... 17/08/2011
Pgina 6 de 7
mais elevanada, mas no impossvel. Se ainda assim acredita que est imune, sinto
muito mas voc precisa atualizar seus conceitos.
H 11 meses
Responder
Lohan
eu gostei boa matria!!!!!!
H 8 meses Responder
Marcus
Prabns pelo artigo.
H 8 meses Responder
Marcos Knijnik
S para avisar que o addslashes apenas funciona caso estejamos falando de string. Porm,
caso estejamos lidando com nmeros, uma outra histria...
Por exemplo:
<?php
$id = $_GET['id']; // um nmero
$query = "SELECT * FROM tabela WHERE id=$id";
?>
A nem addslashes resolve. Imagina que o cara digite "DROP tabela". A l se vai nossa
querida tabela...rs
Para impedir Sql Injection com nmeros, acho que isso basta:
<?php
$id = 0 + $_GET['id'];
?>
E isso , aliis, bem interessante, pois o PHP realiza essa converso automaticamente
(http://www.php.net/manual/pt_BR/language.types.string.php#language.types.string.conversio
n). Ou seja, ele ir adicionar 0 id recebida. Caso esta seja "0 DROP tabela", ela excluir
tudo que segue um caracter no-numrico, no caso o espao, e " DROP tabela" deixaria de
existir...
Att.
Marcos Knijnik
H 7 meses Responder
Leonir
Segue aqui um completinho, no fiz orientado a objetos:
$recebe = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show
tables|update|declare|exec|set|cast|$|#|%|&|'|\"|`|;|\*|--|\\\\)/"),"",trim(addslashes
(htmlspecialchars(strip_tags($_POST['recebe_formulario'])))));
isso foi perfeito para mim, limparam minha base de dados, depois tive de implantar esta
segurana
H 4 meses Responder
Gstv.inc
aqui uma funcao simples
http://www.w3schools.com/PHP/func_mysql_real_escape_string.asp
<?php
function check_input($value)
{
// Stripslashes
if (get_magic_quotes_gpc())
{
$value = stripslashes($value);
}
// Quote if not a number se NAO FOR NUMERO
if (!is_numeric($value))
{
$value = "'" . mysql_real_escape_string($value) . "'";
}
return $value;
}
$con = mysql_connect("localhost", "peter", "abc123");
http://imasters.com.br/artigo/5179/php/sql_injection_no_php_o_que_e_e_como_se_pr... 17/08/2011
Pgina 7 de 7
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// Make a safe SQL
$user = check_input($_POST['user']);
$pwd = check_input($_POST['pwd']);
$sql = "SELECT * FROM users WHERE
user=$user AND password=$pwd";
mysql_query($sql);
mysql_close($con);
basta adicionar o check_input() com seu post dentro e ele faz o resto
espero ter ajudado
H 3 meses Responder
LOL
usem PDO.
H 2 meses Responder
PARCEIROS
http://imasters.com.br/artigo/5179/php/sql_injection_no_php_o_que_e_e_como_se_pr... 17/08/2011