No primeiro artigo do blog vamos introduzir um assunto muito importante para quem trabalha com banco de dados. Como este assunto é meio complexo e extenso eu dividi em alguns artigos.
Importante: este artigo tem como objetivo prevenir os programadores que trabalham ou irão trabalhar com aplicações com acesso a banco de dados. A a forma de utilização do conteúdo aqui apresentado é de total responsabilidade sua.
chega de enrolação, vamos ao que interessa!
SQL Injection (ou Injeção de SQL) é o método utilizado por crackers para executar comandos SQL¹ através de campos de formúlarios ou variáveis transmitidas por QueryString², utilizando, na maioria das vezes, o apóstrofo (‘).
Na maioria dos sites, a consulta ao banco de dados é feita da seguinte maneira:
“SELECT * FROM USUARIOS WHERE LOGIN = ´” + variavelLogin + “´ AND SENHA = ´” + variavelSenha + “´“
Por exemplo: Se em um formulário informarmos “Eric” no campo login e “123456″ no campo de senha, conforme a imagem abaixo:
Imagem 1: Formulario preenchido normalmenteTeremos um comando Select da seguinte forma:
SELECT * FROM USUARIOS WHERE LOGIN = ´Eric´ AND SENHA = ´123456´
O sistema vai procurar um usuário com o Login “Eric” e a senha “123456″.
Agora, se o usuário digita o seguinte no campo login “Eric” e na senha “´ OR 1=1 –” a consulta seria:
SELECT * FROM USUARIOS WHERE LOGIN = ´Eric´ AND SENHA =´´ OR 1=1 –´
Agora o sistema vai selecionar todos os registros quando o login for igual a ” (vazio) ou 1 for igual a 1, ou seja, a condição sempre será verdadeira pois 1 será sempre igual a 1 e isso fará com que o banco de dados traga o primeiro registro que encontrar.
Aí você diz:”Tá, mas pra quê serve os dois traços (–) do final?”
Resposta: Os caracteres “–” servem para comentários e, como sabemos, as linguagens de programação ignoram os comentários, ou seja, tudo que estiver após estes caracteres será ignorado, se não fossem digitados estes caracteres a execução iria falhar pois o apostrofo (‘) que está sobrando causaria um erro de sintaxe.
Com isso o cracker tem acesso ao sistema administrativo apenas com um comando simples de SQL.
É isso pessoal, essa é a introdução sobre SQL Injection, já dá pra se ter uma noção de como funciona. No próximo artigo você pode conferir exemplos de uso e, logo em seguida, como se proteger.
Obs: tome cuidado ao “testar” essa técnica em sistemas que achar por aí pra ver se eles estão previnidos contra este tipo de ataque. Por mais que um iniciante tenha construído um sistema, seu IP provavelmente seria gravado podendo causar dores de cabeça!
