gestao da tecnologia da informação
Se quando formos digitar um login, tivermos essa string de programação do sql na cabeça, podemos formar outra facilmente, que injeta um comando de sql, dentro do que o programador já fez.
Ou seja, se eu digitar Mario no username, o sql ficará: select usuario, senha, nome, admin from Users where usuario=’Mario’ and senha=’s3nh4′
Repare que as aspas simples continuam e fazem realmente parte do comando, que mostra ao sql que aquele campo deve ser comparado com um dado do tipo string.
Agora, se digitarmos no username Ma’rio (com uma aspa simples no meio), a página dará um erro, pois o comando ficaria desse tipo: select usuario, senha, nome, admin from Users where usuario=’Ma’rio’ and senha=’s3nh4′
Analisando, vemos que quando fomos comparar o campo usuário, abrimos uma aspa simples, colocamos o conteúdo Ma e fechamos a aspa simples. Para o sql, a comparação terminou aí, o que vem depois, deveria ser comandos. Mas não era. Era a continuação do username, a palavra rio e mais uma aspa simples, que deveria estar fechando a primeira (antes da palavra Ma), mas na realidade está abrindo uma nova string no SQL, e como não é comparado com nada, o SQL retorna erro de programação.
Então, já que o SQL aguarda ansiosamente por outra aspa simples para fechar aquela primeira, porque nós não damos a ele, e aproveitando, injetamos um comando nele.
Imagine se usarmos a string ‘ or ’1 (isso mesmo: aspa simples + espaco + or + espaco + aspa simples + 1), ficaria assim: select usuario, senha, nome, admin from Users where usuario=” or ’1′ and senha=’s3nh4′
Lendo o comando, seria a mesma coisa que falar pro SQL: me retorne o usuario que seja igual a vazio OU 1. Lembrando que 1 em informática é a mesma coisa que True (verdadeiro). Lendo novamente: Me retorne o usuário que seja igual a vazio (não existe nenhum) OU verdadeiro (opa.. verdadeiro é verdadeiro, então achei). Nisso, a tabela pega todos os usuários, pois todos dão verdadeiro. Não são