A resposta ruim:
Não confiável. Você está se referindo a
mysql_escape_string()
, que não leva em conta a codificação da conexão (enquanto mysql_real_escape_string()
faz). Então, talvez uma string cuidadosamente criada, com um codepoint UTF8 incompleto cuidadosamente criado na frente, pode resultar em, digamos, um sinal de aspas sendo escapado por
mysql_escape_string()
mas o escape em si sendo ignorado pelo MySQL uma vez que o "verá" como um caractere UTF8. Por exemplo.:
0xC2' OR 1=1 ;--
seria escapado por
mysql_escape_string()
como 0xC2\' OR 1=1 ;--
que seria montado para
WHERE password='0xC2\' OR 1=1 ;--';
e visto pelo MySQL (se a codificação de conexão adequada estiver em vigor) como, digamos,
WHERE password='€' OR 1=1 ;[--';] <-- the bracketed part is considered a comment and ignored
que seria uma injeção SQL clássica.
Mas isso se baseia no fato de que você especificou, talvez por distração, uma função duplamente obsoleta . Se você realmente estava se referindo a
mysql_real_escape_string()
, então não funcionaria. Além disso, isso pressupõe que nem o servidor nem a camada de aplicativo (por exemplo, PHP) empregam qualquer tipo de validação de conjunto de caracteres ao preencher a entrada. Se o fizessem, o UTF8 inválido seria excluído na chegada e nunca seria visto pelo
mysql_escape_string
, o que seria então o suficiente. A verdadeira resposta:
Não use
mysql_escape_string
(ou mysql_whatever
) de forma alguma. Eles foram descontinuados e seu código pode parar de funcionar. Em vez disso, use funções PDO.