Programando PHP de forma segura para evitar SQL injections
Fazer uma busca no banco de dados é algo relativamente simples para quem tem uma pequena noção de SQL.
Deixando de lado por um segundo o PHP, a busca nada mais é do que filtrar uma ou mais tabelas de uma base com determinadas "clausulas". Por exemplo:
(que traria da tabela clientes todos os nomes cujo sexo seja igual a 'm')
Bom agora que passamos desse conceito básico do que é uma busca em banco...
O PHP deixa você interagir com o banco do mesmo jeito que você faria diretamente no banco de dados em si, retornando os valores para o script (isso eu presumo que você também já esteja careca de saber).
O problema aparece exatamente com essa frase óbvia. Porque você me pergunta? Vamos ver um jeito muito comum de fazer uma busca no PHP:
Aparentemente, isso nao apresenta problemas óbvios para a maioria dos programadores, porém, isso permite uma exploração de uma falaha no seu SQL. Vamos supor, que os e-mails de seus clientes sejam "protegidos" ou privados, e que, em hipótese alguma, alguém fora você deveria ter acesso a eles.
Uma pessoa poderia utilizar um SQL injection para pegar os e-mails:
- Passado um SQL no lugar da variavel "sexo", você pode alterar a forma de agir do sql. Vamos ver como ficaria o SQL para alterar os resultados:
Agora para que este se enquadre dentro do SQL original adicione algumas coisas para garantir o correto funcionamento do nosso novo sql:
Assim, quando vc passar isso por GET, seu sql ficaria na verdade assim:
Seu PHP interpreta esses dois comandos SQL e retorna o segundo. É claro, que isso nao se limita a SELECTS, você poderia facilmente cirar um SQL como DELETE FROM tbl_clientes; por exemplo (será q eu preciso explicar o problema decorrente disso?)
Deixando de lado por um segundo o PHP, a busca nada mais é do que filtrar uma ou mais tabelas de uma base com determinadas "clausulas". Por exemplo:
SELECT nome FROM tbl_clientes WHERE sexo='m';
(que traria da tabela clientes todos os nomes cujo sexo seja igual a 'm')
Bom agora que passamos desse conceito básico do que é uma busca em banco...
O PHP deixa você interagir com o banco do mesmo jeito que você faria diretamente no banco de dados em si, retornando os valores para o script (isso eu presumo que você também já esteja careca de saber).
O problema aparece exatamente com essa frase óbvia. Porque você me pergunta? Vamos ver um jeito muito comum de fazer uma busca no PHP:
<?php $sql = "select nome from tbl_clientes WHERE sexo ='".$_GET['sexo']."'"; ?>
Aparentemente, isso nao apresenta problemas óbvios para a maioria dos programadores, porém, isso permite uma exploração de uma falaha no seu SQL. Vamos supor, que os e-mails de seus clientes sejam "protegidos" ou privados, e que, em hipótese alguma, alguém fora você deveria ter acesso a eles.
Uma pessoa poderia utilizar um SQL injection para pegar os e-mails:
- Passado um SQL no lugar da variavel "sexo", você pode alterar a forma de agir do sql. Vamos ver como ficaria o SQL para alterar os resultados:
SELECT email as nome from tbl_clientes where sexo like '%'
Agora para que este se enquadre dentro do SQL original adicione algumas coisas para garantir o correto funcionamento do nosso novo sql:
';SELECT email as nome from tbl_clientes where sexo like '%
Assim, quando vc passar isso por GET, seu sql ficaria na verdade assim:
select nome from tbl_clientes WHERE sexo ='';SELECT email as nome from tbl_clientes where sexo like '%'
Seu PHP interpreta esses dois comandos SQL e retorna o segundo. É claro, que isso nao se limita a SELECTS, você poderia facilmente cirar um SQL como DELETE FROM tbl_clientes; por exemplo (será q eu preciso explicar o problema decorrente disso?)
Páginas:
1
2
Novo Comentário: