Concretização:
Introduzir o seguinte código no formulário de autenticação:
Campo | Código a introduzir |
Username | um nome aleatório |
Password | ' OR '1'='1 |
Na acção a que o formulário está associado é executada uma query à base de
dados do tipo:
SELECT * FROM Tabela WHERE
user='username' AND pass='password';
Ao substituirmos username por
um nome qualquer (ou mesmo nenhum) e a
password pelo código que está indicado acima vamos ficar com:
SELECT * FROM Tabela WHERE
user='' AND pass='' OR '1'='1';
o que nos garante de imediato o acesso supostamente não autorizado.
O atacante consegue assim com apenas um pequeno excerto de uma query SQL
ultrapassar todo o mecanismo de segurança do site em questão.
Qualquer aplicação que receba input do utilizador e o utilize para aceder a
uma base de dados é uma aplicação plausível de ser vulnerada.
No exemplo acima demonstrou-se o como é fácil realizar este tipo de ataques para
ultrapassar mecanismos de autenticação, no entanto, a utilização do SQL
Injection é muito variada. Sendo utilizada pelos atacantes para apagar tabelas
inteiras da base de dados, inserir privilégios a determinado utilizador, roubar
informação privilegiada, entre outros possíveis ataques.
No entanto, a boa noticia é que o SQL Injection é uma vulnerabilidade facilmente
contornável com a simples escrita de código seguro.
Algumas das boas práticas de programação que deveriam estar inerentes a qualquer
profissional são o fazer tratamento de erros, não deixando que a aplicação
mostre os seus erros internos, validar os dados que a aplicação recebe e, para
finalizar, a velha máxima "Quando tudo mais falhar, tenha sempre um backup em
mãos..."