Injeção de Código SQL é um tipo de ataque em que era possível ganhar acesso a bases de dados de um servidor web usando para isso apenas o navegador, como segue o exemplo a seguir.
Considere uma página web qualquer que pede nome e senha do usuário. Ao preencher esses campos e clicar no botão de envio, é feita uma busca interna, em uma tabela da base de dados do sistema, por um registro que contenha o nome e senha digitados: SELECT colunas FROM tabela WHERE nome=’Marcel’ AND senha=’UFPR’. Nesse exemplo, o acesso só será fornecido se realmente houver um usuário “Marcel” cuja senha seja “UFPR”.
No entanto, até pouco tempo atrás era possível manipular a sentença de SQL e ganhar acesso mesmo não possuindo as informações requeridas. Como exemplo, se no campo nome fosse digitado “Marcel’ OR 1=1 –” e a senha fosse deixada em branco, o SQL executado seria: SELECT colunas FROM tabela WHERE nome=’Marcel’ OR 1=1. E isso acontecia porque o caractere de aspas simples, colocado depois de “Marcel”, delimitava a string, fazendo com que “OR 1=1 –” se tornasse não parte da variável nome, mas sim parte do comando SQL. Repare também que o “AND senha=””, deixa de fazer parte do SQL. Na verdade ele está lá, mas não como parte da instrução e sim como um comentário (tudo o que aparece depois de “–” é considerado comentário e por isso descartado).
Com essa artimanha, o acesso era concedido desde que na tabela houvesse algum usuário chamado “Marcel” ou que 1=1 fosse matematicamente correto. Ora, 1 é sempre igual a 1 e, por isso, independentemente do nome de usuário existir ou da senha existir, o acesso estava garantido. Não bastasse isso, nada impedia o invasor de utilizar outros comandos SQL para deletar, incluir ou alterar dados do banco. Uma solução simples para isso é a imposição de limites de texto em campos de formulário e não permitir que esses campos aceitem palavras como “select”, “drop” e “delete” ou caracteres como aspas, hífen e ponto e vírgula.
Uma vez que tudo que envolve informática muda muito rapidamente, os passos relatados acima provavelmente já não valem hoje e, os que valem hoje, talvez não valham amanhã. A única certeza é de que enquanto existirem sistemas de informação sem a validação apropriada dos campos de entrada, sempre haverá alguém disposto a fazer uma injeção de código, pois as técnicas mudam, mas a essência do ataque permanece a mesma.
MACHADO, Marcel Jacques. Segurança da Informação: uma Visão Geral sobre as Soluções Adotadas em Ambientes Organizacionais. Curitiba: UFPR, 2012. Trabalho de Graduação – Bacharelado em Ciência da Computação, Universidade Federal do Paraná, Curitiba, 2012.