sábado, 27 de setembro de 2008

SQL Injection for Dummies


Cheguei a conclusão que o maior problema das pessoas que se metem a aprender SQL Injection é não saber o que é SQL e muito menos o que é o SQL Injection. Nesse post eu não vou e nem quero me aprofundar em nada, irei apenar passar uma visão geral sobre o assunto.

De acordo com a Wikipedia o SQL significa:
"Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL, é uma linguagem de pesquisa declarativa para banco de dados relacional (base de dados relacional). Muitas das características originais do SQL foram inspiradas na álgebra relacional."
Se você não entendeu ou ficou com preguiça de pesquisar, posso resumir que o SQL é um sistema de banco de dados utilizado em larga escala.

Quando você entrou nesse blog, para esse post ser exibido o seguinte processo teve que ocorrer:


Você requeriu esta pagina ao servidor web que consultou o servidor SQL os dados desse post.

SQL Injection, como o nome já diz, constitui você injetar comandos de SQL na consulta. Considere o seguinte script PHP vulneravel a SQL Injection:


Em lugar nenhum nesse script de autenticação vemos o input do usuario ser tratado, sendo assim se o usuario entrar com o input no campo login "admin'/*" e senha vazia a consulta passa a ser:

SELECT * FROM users WHERE username='admin'/*' and password=''

Como você já deve saber /* é um comentario, tudo que vier depois dele é ignorado pelo servidor, sendo assim o servidor só verificou se o nome de usuario existe e autenticou o usuario.

Parece simples mas não é, nenhum programador é bobo de deixar um login sem verificação (ok.. alguns são.... continuando), obviamente SQL Injection pode ser feito não apenas em scripts de logins mas em qualquer coisa aonde entra o input do usuario na consulta.

Para proteger um script contra esse tipo de ataque basta verificar o input do usuario contra caracteres especiais que o seu SQL server possa interpretar. No PHP a maneira mais facil de fazer isso é passando o input pela função mysql_real_escape_string.

No meu próximo livro "SQL Injection for Lamers" irei passar algumas receitas de bolo, pode não parecer mas para escrever este artigo levei um tempo consideravel. Se você se interessou por este livro ele esta disponivel nas melhores livrarias e no site da editora O'Really.

2 comentários:

Lidia disse...

O Really and/or O R Ly - seria melhor se levasse isso mais a serio: 1. Apesar de ser uma pessoa self-defined as ' alguem que nao termina nad ' - aparentemente o Blog todo gira em torno de PHP and SQL..
2. Deduzo que o interesse principal e programacao: 'elementary, my dear Rodr..'
3. Maybe The Action for non-dummies is to go ahead e terminar o tal de BIG Exam= provao . My keyboard esta com US English -
no accents
4. Then go ahead and study very seriously Programacao..
5. Once you are there pode escrever todas as besteiras for dummies and non dummies ...
6. E continuar andando... uma ez que se tenha um objetivo .. todo dia e uma andada para ele

That's it.

Lidia disse...

Errata: na ultima frase - em vez de uma ez...o correto e uma vez...mas uma ez fica tambem nao terminado....