Inyección SQL que evade mysql_real_escape_string() — ¿cómo protegerse?
¡Hola a todos! Soy un desarrollador PHP principiante y me encontré con una situación muy extraña. En muchos foros escriben que la función `mysql_real_escape_string()` es una protección confiable contra inyecciones SQL, y siempre la usaba. Pero recientemente leí que hay formas de evadirla, y eso me asustó mucho.
Tengo un código simple para la autenticación de usuario:
```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);
```
Pensaba que escapar todas las comillas y caracteres especiales hacía la consulta segura. Pero dicen que si se usa una codificación multibyte (por ejemplo, GBK o SJIS), se puede elegir una secuencia de caracteres que "se coma" la barra invertida de escape y permita insertar código SQL arbitrario. ¿Es cierto? ¿Cómo funciona exactamente? Y lo principal: ¿cómo debo proteger mis consultas ahora? ¿Acaso