Inyección SQL que evade mysql_real_escape_string() — ¿cómo protegerse?
¡Hola a todos! Soy un desarrollador PHP principiante y me atormenta una pregunta. He leído que la función `mysql_real_escape_string()` (o su análogo `mysqli_real_escape_string()`) se considera una protección confiable contra inyecciones SQL. Pero recientemente me topé con un post antiguo en Stack Overflow donde se afirma que se puede evadir.
En mi proyecto uso la extensión obsoleta `mysql_*` (sé que está deprecated, pero el proyecto es antiguo y por ahora no hay posibilidad de reescribir todo a PDO). Aquí un ejemplo de mi código:
```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);
```
Ingenuamente pensaba que escapar caracteres como las comillas era suficiente. Pero en esa discusión se hablaba de codificaciones, caracteres multibyte y algo de magia con `GBK`. No entendí bien la esencia de la vulnerabilidad. ¿Cómo se puede evadir exactamente `mysql_real_escape_string()`? Y lo principal