Chirlison 1 Denunciar post Postado Dezembro 12, 2013 Bom dia a todos!Pessoal, estou com um problema de segurança em meu site!Preciso de ajuda para proteger meu site de sql Injection. //Ex: http://www.meusite.com.br/news.php?id=28&tabela=noticias //Na página news.php, eu pego esses dados da seguinte forma: $id = addslashes( (int) $_GET['id'] ); $tabela = $_GET['tabela']; $busca=mysql_query("SELECT * FROM $tabela WHERE id=$id"); if(!mysql_num_rows($busca)){ echo 'Nenhum dado cadastrado na base de dados'; }else{ while($ver=mysql_fetch_assoc($busca)){ $id=$ver['id']; $nome=$ver['nome']; } } Diante deste código de consulta, alguém poderia me dar dicas ou exemplos do que eu poderia fazer para evitar que meu site fosse invadido pela url por exemplo? Desde já, agradeço a todos que puderem me ajudar! Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Dezembro 12, 2013 Nunca use na query nada vindo do usuário sem tratar, para evitar dores de cabeça use prepared statements (PDO/mysqli_) Compartilhar este post Link para o post Compartilhar em outros sites
Chirlison 1 Denunciar post Postado Dezembro 12, 2013 ESerra, muito obrigado pela ajuda, mas você tem algum exemplo de como eu poderia usar este prepared statements nesse exemplo que te passei, só para eu ter uma noção melhor de como usá-lo, pois a maioria dos artigos são em inglês e eu não tenho nenhum curso ainda de inglês? Compartilhar este post Link para o post Compartilhar em outros sites
srnalim 21 Denunciar post Postado Dezembro 12, 2013 http://imasters.com.br/artigo/5179/ Compartilhar este post Link para o post Compartilhar em outros sites
Chirlison 1 Denunciar post Postado Dezembro 12, 2013 srnalim, obrigado pelo link! Compartilhar este post Link para o post Compartilhar em outros sites
tiagofelipebones 5 Denunciar post Postado Dezembro 12, 2013 function anti_sql_injection($sql){// remove palavras que contenham sintaxe sql$sql = preg_replace("/(from|select|insert|delete|truncate|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$sql = mysql_real_escape_string($sql);//Escapa caracteres mysqlreturn $sql;} ex: $id = anti_sql_injection($_GET['id']); Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Dezembro 12, 2013 Não sei o que é pior nessas funções "anti_sql_injection", o fato delas proibirem o usuário de digitar coisas ou o fato delas não impedirem sql injection, já que dá pra burlar.... Compartilhar este post Link para o post Compartilhar em outros sites
ivanferrer 5 Denunciar post Postado Dezembro 12, 2013 primeiro, evite usar querystring. use tudo via método, é melhor e mais seguro. vc pode criar regras no seu .htaccess para tratar segurança de URL..por exemplo, em vez de enviar sua url inteira assim, faça uma regra no htaccess, isso aumenta tanto a segurança, como a indexação no google: Veja um exemplo de regra, mudando sua URL para o esquema abaixo:http://www.meusite.com.br/noticias/28/tabela/noticias Para fazer isso crie um arquivo no root do servidor: com esse nome .htaccess e coloque o seguinte texto dentro dele:Options +FollowSymlinksRewriteEngine OnRewriteBase /RewriteRule ^noticias/([0-9]+)/tabela/(.*)$ news.php?id=$1&tabela=$2 Compartilhar este post Link para o post Compartilhar em outros sites
tiagofelipebones 5 Denunciar post Postado Dezembro 13, 2013 Não sei o que é pior nessas funções "anti_sql_injection", o fato delas proibirem o usuário de digitar coisas ou o fato delas não impedirem sql injection, já que dá pra burlar.... Com certeza amigo Eserra, qualquer sistema é burlavel, não existe sistema 100% seguro 99,99% sim, nenhum ser humano pensa igual a outro, com esta " funçãozinha anti_sql_injection" já atrapalha a injeção, o cracker que quiser invadir o sistema irá invadir de qualquer forma. O PDO já faz estes tratamentos(#2) mas nem todo mundo sabe trabalhar com ele, não é defeito não saber afinal ninguém nasce sabendo, o problema esta em saber e não repassar o conhecimento, repassando fragmentos de scripts ou tutos a serem estudados já é um inicio para tornar a comunidade mais produtiva e alavancar o conhecimento! Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Dezembro 13, 2013 :closedeyes: Com certeza amigo Eserra, qualquer sistema é burlavel, não existe sistema 100% seguro 99,99% sim, nenhum ser humano pensa igual a outro, com esta " funçãozinha anti_sql_injection" já atrapalha a injeção, o cracker que quiser invadir o sistema irá invadir de qualquer forma. O PDO já faz estes tratamentos(#2) mas nem todo mundo sabe trabalhar com ele, não é defeito não saber afinal ninguém nasce sabendo, o problema esta em saber e não repassar o conhecimento, repassando fragmentos de scripts ou tutos a serem estudados já é um inicio para tornar a comunidade mais produtiva e alavancar o conhecimento! Atrapalha quem? echo anti_sql_injection('DROP TABLE');// Se digitar em maiúsculo já era, ela é case sensitive, falta o modificador i echo anti_sql_injection('ddrop tablerop table');//Se usar a imaginação, também já era Na minha opinião, a única pessoa que vai ser atrapalhada é o usuário que não tem conhecimento, e este com certeza não vai estar tentando quebrar o sistema :closedeyes: Compartilhar este post Link para o post Compartilhar em outros sites
tiagofelipebones 5 Denunciar post Postado Dezembro 13, 2013 Atrapalha quem? echo anti_sql_injection('DROP TABLE');// Se digitar em maiúsculo já era, ela é case sensitive, falta o modificador i echo anti_sql_injection('ddrop tablerop table');//Se usar a imaginação, também já era Na minha opinião, a única pessoa que vai ser atrapalhada é o usuário que não tem conhecimento, e este com certeza não vai estar tentando quebrar o sistema :closedeyes: Ai estamos começando a nos entender e dar exemplos para nosso amigo Chirlison por onde começar, 1 ponto Eserra :clap: . Mas com toda certeza PDO ainda é a melhor solução. Compartilhar este post Link para o post Compartilhar em outros sites