SQL Injection é um tipo de ataque que visa a vulnerabilidade de um aplicação que possue uma entrada de dados que vai ser utilizada para fazer alguma execução no banco de dados, onde esta entrada não foi validada.
$user_name=$_POST["input_user"]; $pwd_name=$_POST["input_pwd"];
Select user_name, pwd_name FROM sys_users WHERE user_name='$user_name' AND pwd_name='$pwd_name'
No caso acima temos uma simples consulta ao banco de dados onde $user_name e $pwd_name são campos de texto de um formulário que está verificando o login e a senha de um determinado usuário. Se um atacante desejar, ele pode facilmente atacar o sistema que possue esse query para verificar o login.
Um modo simples de efetuar um ataque ao sistema para verificar a vulnerabilidade do mesmo seria passar no input_user o seguinte valor:
input_user = jo'hn
Neste caso o correto seria passar john, mas estamos passando jo’hn para quebrar a string que forma a sql e gerar um erro no banco de dados. Esse erro imediatamente diz para o atacante que o formulário não possue validação e que ele pode fazer uma SQL Injection mais bem elaborada para fazer o que desejar com o banco de dados.
$user_name = 'OR 1=1
Esse é uma forma clássica de torna a consulta ao banco de dados válida sempre, já que 1=1 sempre vai retornar verdadeiro.
…continuação…
Referências