anterior
Tweet about this on TwitterPin on PinterestShare on LinkedInShare on Google+Email this to someoneShare on Facebook
QR CODE

Saiba o que é SQL Injection e como preveni-la

Capa do post

Você que é desenvolvedor de sites – ou um estudante com pretensões nessa área- com certeza deve se preocupar (e muito) com a segurança dos sites que cria e desenvolve, certo? Pois este post mostrará a você como testar e verificar se o seu site está realmente seguro contra injeções de código SQL feitas por pessoas mal intencionadas.


– Nota do moderador: este post  foi escrito pela instrutora Renata Santos, da Microcamp de Praia Grande. A Renata já é uma colaboradora do Blog de Informática e é uma grande apaixonada por programação. Caso queira entrar em contato com ela, deixe uma mensagem no campo de comentários no final da página ou vá até o seu perfil do Facebook . Espero que gostem do post… e boa leitura a todos! 


Primeiramente vamos entender o que são injeções de código SQL – ou como são comumente chamadas na internet, “SQL Injection”.

O SQL Injection nada mais é do que a inserção de códigos SQL em formulários. Para isso basta o invasor ter noção de códigos SQL e com poucos passos é possível resgatar senhas do banco de dados ou até mesmo apagar uma tabela inteira.

Se você achou o título desse post curioso mas ainda não sabe nada sobre SQL, explicarei de forma resumida: SQL é sigla em inglês para “Structured Query Language” ou seja, em bom português, “Linguagem de Consulta Estruturada”. É uma linguagem padrão para o gerenciamento de dados que interage com os principais bancos de dados baseados em um  modelo relacional. Alguns dos principais comandos SQL para manipulação de dados são: INSERT (inserção), SELECT (consulta), UPDATE (atualização), DELETE (exclusão). SQL possibilita ainda a criação de relações entre tabelas e o controle do acesso aos dados. Se quiser saber mais, clique aqui (ou e se você é um aluno do curso de Web Design da MicrocampSP e ainda não estudou PHP, por exemplo, aguarde que sua hora irá chegar).

Primeiramente vamos entender um código SQL. Segue abaixo uma consulta simples:

“SELECT * FROM usuario”

Essa é uma consulta simples, o SELECT irá selecionar, o * irá buscar todos os registros e o FROM usuários indica de qual tabela será feita a busca.

O que acontece é que quando estamos fazendo uma busca com parâmetros, quebramos a SQL para inserir o parâmetro, e é ai que a invasão se torna possível. Repare a seguir uma consulta SQL com parâmetros:

“SELECT nm_usuario, nm_senha, nm_permissao FROM usuario WHARE nm_usuario = ‘renata’ AND nm_senha = ‘microcamp’”

Essa consulta retornará o nome do usuário, a senha e a permissão, onde o usuário for renata e a senha for microcamp.

Antes de começarmos, é interessante notar que os códigos aqui apresentados são meramente educativos e a utilização fica a cargo do leitor. Utilize esse conhecimento com consciência!

Primeiramente, o invasor tenta inserir um nome utilizando aspas. Isso serve só para verificar se o formulário possui alguma função, java script ou alguma linguagem que bloqueie o uso de um caractere como a apóstrofo (‘) ou aspas simples. Conforme mostra a Figura 1. Caso não seja feito esse tipo de tratamento, ocorrerá um erro da instrução SQL (incorrect Sintax). Diante desse resultado, o invasor já sabe que existem possibilidades de invasão do referido site.

Teste de validação

O invasor tentará então aplicar códigos SQL, e, através dos erros gerados, tentará realizar a invasão.

Visto que o desenvolvedor não tratou a apóstrofo, o invasor segue com a sua invasão e tenta quebrar a SQL no momento em que o parâmetro é passado. Para interromper essa instrução SQL e inserir outro código, primeiramente devemos interromper o parâmetro  exatamente no momento em que ele é passado, considerando que a instrução SQL receberá o login e a senha através da caixa de texto apresentada para o usuário – conforme mostra a Figura 1. Nesse momento é que o invasor digitará um simples código: ‘ or 1=1 —.

Código injeção

Esse é o tipo de invasão mais comum. Nela, o apóstrofo serve para interromper o código anterior e iniciar o novo comando.

Exemplo:

“SELECT nm_usuario, nm_senha, nm_permissao FROM usuario WHARE nm_usuario = ‘ or 1=1-- AND nm_senha = ‘microcamp’”.

O exemplo acima busca os campos nm_usuario, nm_senha, nm_permissao referente a tabela usuário, quando o nm_usuário seja igual a vazio ou quando o número 1 for igual a 1. Nesse caso, a ultima condição sempre dará como verdadeira. Os últimos dois hifens servem para desconsiderar o final da String SQL.

Também é possível buscar por um usuário chamado admin, pois na maioria das bases de dados é cadastrado um usuário com esse nome, por padrão. Dessa forma, o invasor tentará invadir com o nome admin e a senha como ‘ or 1=1 como mostra a Figura 3. Se houver realmente um usuário com esse nome, ele conseguirá burlar o sistema.

Usuario Admin

Além desses comandos existem vários outros para criar um usuário, ou até mesmo excluir uma tabela. Como nosso foco é a proteção, deixaremos esses códigos de lado e vamos na forma de proteção. Uma vez que sabemos como é realizada a invasão, poderemos analisar o que será necessário fazer para aperfeiçoar e deixar seu site mais seguro.

Como evitar a injeção de códigos SQL

1º Passo: Criar uma função Javascript ou mesmo uma função de acordo com a linguagem que está utilizando para poder substituir a apóstrofo por um espaço vazio, e bloquear palavras como: drop, insert, delete, update, (–), (‘) e (;);

2º passo: Evite a criação de usuários como: teste ou admin.

3º passo: Não faça a validação de usuário e senha através de Strings SQL, a validação não deverá ser realizada no “front-end” da página, ou seja, divida sua aplicação ou site em camadas: camada de apresentação, onde ficarão salvas as páginas web, camada de negócios, onde ficarão salvas as páginas da linguagem utilizada e camada de dados, onde ficarão as páginas relacionadas ao Banco de Dados. Dessa forma, isso dificultará a quebra da String SQL uma vez que a validação será realizada em outra camada.

4º passo: Caso o site possua uma área restrita, é aconselhável não colocar link para essa área restrita e sim que avise aos usuários que a página restrita será possível acessar através da URL do site.

Exemplo: www.siteteste.com.br/admin

No exemplo acima é possível acessar a área restrita somente através do endereço.

5º passo: Realize tratamentos de erros para suas instruções SQL, para que em caso de erros não seja retornado nenhum tipo de informação referente ao Banco de Dados para o usuário. Somente uma página que informe que os dados digitados estão inválidos.

6º passo: Não concatene entradas de dados que não foram validadas, pois como vimos o ponto inicial para a invasão é através da interrupção da String SQL para ocorrer a injeção e código SQL.

Segurança é coisa séria, quando desenvolvemos um site não podemos só pensar na parte gráfica ou em suas funcionalidades, temos que tomar muito cuidado com todos os aspectos, afinal informação não tem preço.

 “Quer evitar ser hackeado? Tente pensar então como um hacker e suas chances diminuirão de ser invadido!”

Espero que tenham gostado do tutorial, apliquem, usem e abusem das informações aqui postadas. E comentem, curtam e compartilhem com seus amigos! Não deixe de postar nos comentários as dúvidas e as sugestões para os próximos posts. Até a próxima!

Próximo

Postado por

Web designer, Ilustrador e produtor visual gráfico, santista de nascimento e de coração, amo o que faço e estou muito feliz em fazer parte da equipe Microcamp.

Postagem Relacionada

Hacker: Ameaça ou Aliado?
  O que dizer referente a um Hacker? Afinal o que eles fazem? Hackers são