Injeção SQL que contorna mysql_real_escape_string() — como se proteger?
Olá a todos! Sou um desenvolvedor PHP iniciante e me deparei com uma situação muito estranha. Em muitos fóruns escrevem que a função `mysql_real_escape_string()` é uma proteção confiável contra injeções SQL, e sempre a usei. Mas recentemente li que existem maneiras de contorná-la, e isso me assustou muito.
Tenho um código simples para autenticação de usuário:
```php
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = mysql_query($query);
```
Eu pensava que escapar todas as aspas e caracteres especiais tornava a consulta segura. Mas dizem que, se for usada uma codificação multibyte (por exemplo, GBK ou SJIS), é possível escolher uma sequência de caracteres que "consome" a barra de escape e permite inserir código SQL arbitrário. Isso é verdade? Como exatamente funciona? E o principal — como devo proteger minhas consultas agora? Será que