Bom, aqui não é bem “aqui”. Aqui é logo ali numa outra aplicação nesse mesmo servidor mas fora do Word Press. Não entendeu? Não tem problema, isso não tem importância mesmo
SQL Injection para quem não sabe (ou Injeção de SQL em português) é uma técnica onde um usuário mal intencionado ou um invasor pode se aproveitar de falhas na programação de um sistema para ter elevação de permissões ou até mesmo acesso à dados confidenciais e direito de exclusão de informações.
Como funciona
Um exemplo clássico de SQL Injection é conseguir burlar uma página de login ou de verificação de nível de acesso acrescentando uma condição sempre válida na execução de querys, por exemplo, eu tenho um sistema que para validar o login do usuário executa uma query no banco de dados da seguinte forma:
SELECT login, senha FROM users WHERE login = ‘login’ AND senha = MD5(‘senha’);
O código acima não ilustra uma linguagem especifica, apenas SQL ANSI e uma chamada à função MD5 para verificação da senha fica criptografada no banco de dados com o mesmo algoritmo. Com isso eu faço um “if” que verifica se a consulta trouxe um resultado fazendo com que uma flag se transforme em “true” e libere acesso.
Hora da Maldade
Agora que já sabemos como funciona o sistema normalmente, imaginamos se onde está posicionada a variável “login” vem o seguinte código:
‘ OR 1=1; –
Já sacou a jogada? Ainda não? Vamos montar a string completa:
SELECT login, senha FROM users WHERE login = ‘’ OR 1=1; –’ AND senha = MD5(‘senha’);
Deu pra entender agora? Com aquele código no login conseguimos fechar o espaço de igualdade do login e colocar um OR 1=1 que sempre irá retornar true, ou seja, acesso liberado ao sistema. Para evitar erro na execução da consulta colocamos os “–” que simbolizam um comentário.
Efeitos
Talvez apenas o exemplo citado acima não seja o suficiente para invadir um sistema que não tem proteção, mas em geral é! E o pior, isso abre precedentes para a execução de mais código, por exemplo:
‘ DELETE FROM users; –
Valem também consultas para obter dados de outros usuários ou até mesmo inserir informações, já que se você tiver nomes de tabelas (que geralmente não são muito criativos) você pode fazer um DELETE, nada te impede de fazer um INSERT
Como Evitar
Evitar uma injeção de SQL não é tarefa complicada nem que exige avançados conhecimentos de linguagens de programação. O simples trecho de código em PHP abaixo já serve para evitar dois dos caracteres mais perigosos, igualdade e aspa simples:
$usuario = str_replace("’", "", $_POST['username']);
$usuario = str_replace("="", "", $usuario);
Simples assim! Localize todas as aspas simples da String e remova e depois sinais de igualdade e remova! Pronto, seus dados estão prontos para serem usados e direcionados para a query.
Bom, era uma dica rápida, espero que possa ajudar quem está começando e ainda não tem muita noção de segurança em sistemas.
[]’s
