Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Chirlison

Como proteger minha url de sql Injection

Recommended Posts

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

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

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

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 mysql
return $sql;
}

 

ex: $id = anti_sql_injection($_GET['id']);

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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 +FollowSymlinks
RewriteEngine On

RewriteBase /
RewriteRule ^noticias/([0-9]+)/tabela/(.*)$ news.php?id=$1&tabela=$2










Compartilhar este post


Link para o post
Compartilhar em outros sites

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

: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

 

 

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.