Primeiro, o que se trata é chamado de SQL-Injection . É basicamente apenas a possibilidade de alterar consultas no banco de dados por meio da entrada do usuário.
Vejamos um exemplo:
Inquerir:
SELECT temp1 FROM temp WHERE temp2 = 'VAR1';
Agora vamos atribuir a VAR1 o valor de:
'; DROP TABLE *; --
E teremos:SELECT temp1 FROM temp WHERE temp2 = ''; DROP TABLE *; --';
Com
mysql_real_escape_string
ficaria assim:SELECT temp1 FROM temp WHERE temp2 = '\'; DROP TABLE *; --'
mysql_real_escape_string
'protege' uma string para uso em uma consulta. Mas no final, você deve parar de usar o
mysql_*
completamente . Eles são obsoletos e considerados inseguros quando se trata de impedir a injeção de SQL ou outros meios de moderação com as consultas. Você deve simplesmente parar de concatenar consultas assim e comece a usar declarações preparadas , que não apenas são mais fáceis de usar, evitam a injeção de SQL por padrão, mas também podem melhorar a velocidade do seu aplicativo.
Para PHP existem duas extensões que são projetadas para fechar todo o
mysql_*
aberto:E repito:Por favor, pare de usar
mysql_*
!