HUGO BORGES Postado Janeiro 6, 2011 Denunciar Share Postado Janeiro 6, 2011 Bom um colega meu falou que meu site pode estar vulnerável a SQL Injection, Poderiam me explicar como isto funciona e como posso me prevenir? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 svjets Postado Janeiro 6, 2011 Denunciar Share Postado Janeiro 6, 2011 Com isso já dá para ter uma noção de como funciona: http://pt.wikipedia.org/wiki/Inje%C3%A7%C3%A3o_de_SQL Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 david.lyonnais Postado Janeiro 7, 2011 Denunciar Share Postado Janeiro 7, 2011 Depois de você entender oque Sql Injection olhando o link do cara ai de cima.Você pode usar essa função para evitar esse maldito ^^//Metodo anti-injection 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; } Chamando função <?php $login = anti_injection($_POST['login']); $senha = anti_injection($_POST['senha']); //Resto do codigo ?> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 HUGO BORGES Postado Janeiro 8, 2011 Autor Denunciar Share Postado Janeiro 8, 2011 (editado) david.lyonnais pelo que entendi onde tiver assim:$login = $_POST['login'];Tenho que colocar assim :$login = anti_injection($_POST['login']);E isto ira prevenir o SQL Injection?OBS: Tenho que colocar anti_injection($_POST em todos os POST?----------------------------------------------------- EDIT ---------------------------------Olha achei este aqui na internet:<?php 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; } ?> anti_sql_injection($_POST[’usename’])Queria saber se este aqui funciona? Editado Janeiro 8, 2011 por HUGO BORGES Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 david.lyonnais Postado Janeiro 8, 2011 Denunciar Share Postado Janeiro 8, 2011 (editado) Tem que coloca a função que eu disse no $_POST e $_GET.Se fazer isso já é o bastante.Ex.:$id = anti_injection($_GET['id']); $usuario = anti_injection($_POST['usuario']);A função esta toda comentada dai você consegue identifica o que cada linha de codigo faz.@editEm TODOS $_POST e $_GET Editado Janeiro 8, 2011 por david.lyonnais Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 HUGO BORGES Postado Janeiro 8, 2011 Autor Denunciar Share Postado Janeiro 8, 2011 (editado) Vlw pela ajuda, criei um arquivo Inject.php, e para chamar a função faço assim:include "Inject.php"; $id = anti_injection($_GET['id']); $usuario = anti_injection($_POST['usuario']); Desse geito funciona? Tenho que colocar no $_REQUEST também? ------------------------------ EDIT --------------------------------- Notei um erro aqui: Deprecated: Function sql_regcase() is deprecated in /opt/lampp/htdocs/www/HDR Info/Inject.php on line 6 Já coloquei isto no meu sistema de login, quando digito o login e senha correto ele entra normal, mas quando digito errado, ele fala login e senha errado e aparece um erro na linha 6 onde esta esta parte: $sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);O que sera que pode ser? Editado Janeiro 8, 2011 por HUGO BORGES Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vini_loock Postado Janeiro 8, 2011 Denunciar Share Postado Janeiro 8, 2011 Eu também tenho uma dúvida sobre isso:Em todas as minhas query que o usuário vai inserir os dados a serem buscados, eu substituo as barras e aspas, isso já é o suficiente para evitar a SQL Injection?Vlw Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 david.lyonnais Postado Janeiro 8, 2011 Denunciar Share Postado Janeiro 8, 2011 Deprecated: Function sql_regcase() is deprecatedQuer dizer que a função caio em desuso tenta coloca o seguinte//Metodo anti-injection function anti_injection($sql) { // remove palavras que contenham sintaxe sql $sql = preg_replace("/(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;Retire a função slq_regcase(). Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 HUGO BORGES Postado Janeiro 9, 2011 Autor Denunciar Share Postado Janeiro 9, 2011 (editado) beleza meu arquivo inject.php ficou assim:<?php // Metodo anti-injection function anti_sql_inject($sql) { // Remove palavras que contenham sintaxe sql $sql = preg_replace("/(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; } ?> Agora posso ficar tranquilo contra inject? So mais uma coisa, acho que ficaria legal colocar uma mensagem para quem tentar usar inject, tipo assim: echo "<script>alert('ERRO. SQL Inject detectado.'); history.back();</script>";Mas em que logar devo colocar isto?--------------------------- edit ------------------------------E como posso testar para ver se o site esta protegido contra Inject? Editado Janeiro 9, 2011 por HUGO BORGES Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 david.lyonnais Postado Janeiro 9, 2011 Denunciar Share Postado Janeiro 9, 2011 (editado) Pra mostrar erro você pode fazer assim:Vai mudar totalmente a função.<?php // Metodo anti-injection function anti_sql_inject($sql) { // Remove palavras que contenham sintaxe sql $sql = trim($sql); //limpa espaços vazio $sql = strip_tags($sql); //tira tags html e php $pattern = "/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\|\"|\')/"; $match = preg_match($pattern,$sql); if($match){ echo "<script>alert('ERRO. SQL Inject detectado.'); history.back();</script>"; exit; } return $sql; } ?>Para testar tenta colocar no input que vai passar via post: uma aspa simple 'Se retorna o erro sql inject já ta funfando se retorna nada qr dizer que não ta funcionando ai você volta aqui pra eu a gente ver onde pode esta o erro.Pronto. Editado Janeiro 9, 2011 por david.lyonnais Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 HUGO BORGES Postado Janeiro 9, 2011 Autor Denunciar Share Postado Janeiro 9, 2011 Bom coloquei as ' e o erro apareceu:ERRO. SQL Inject detectadoEntão já esta funcionando, obrigado david.lyonnais pela atenção, fica com Deus. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Janeiro 9, 2011 Denunciar Share Postado Janeiro 9, 2011 Utiliza PDO e pronto... essas funções anti sql injection não tem mais sentido com os recursos que já estão disponíveis nativamente no PHP. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 HUGO BORGES Postado Janeiro 10, 2011 Autor Denunciar Share Postado Janeiro 10, 2011 Como assim? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 david.lyonnais Postado Janeiro 10, 2011 Denunciar Share Postado Janeiro 10, 2011 (editado) PDO é:The PHP Data Objects e uma nova estenção que vem no php5 para você ter um controle dos banco de dados como exemplo o ADODB que você controla varios banco de dados somente mudando uma linha de comando com o PDO é a mesma coisa.Um pequeno tutorial de PDO nesse link:Tutorial PDOEssa classe "já vem embutido" com uma função anti SQL Injection. Editado Janeiro 10, 2011 por david.lyonnais Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 HUGO BORGES Postado Janeiro 10, 2011 Autor Denunciar Share Postado Janeiro 10, 2011 Vlw vou dar uma olhada. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
HUGO BORGES
Bom um colega meu falou que meu site pode estar vulnerável a SQL Injection,
Poderiam me explicar como isto funciona e como posso me prevenir?
Link para o comentário
Compartilhar em outros sites
14 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.