Avatar ·

Injection SQL contournant mysql_real_escape_string() — comment se protéger ?

Bonjour à tous ! Je suis un développeur PHP débutant, et une question me taraude. J'ai lu que la fonction `mysql_real_escape_string()` (ou son équivalent `mysqli_real_escape_string()`) est considérée comme une protection fiable contre les injections SQL. Mais récemment, je suis tombé sur un vieux post sur Stack Overflow où il est affirmé qu'on peut la contourner. Dans mon projet, j'utilise l'extension obsolète `mysql_*` (je sais qu'elle est deprecated, mais le projet est ancien, et je n'ai pas encore la possibilité de tout réécrire en PDO). Voici un exemple de mon code : ```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); ``` Je pensais naïvement que l'échappement de caractères comme les guillemets suffisait. Mais dans cette discussion, on parlait d'encodages, de caractères multi-octets et d'une certaine magie avec `GBK`. Je n'ai pas bien compris le fond de la vulnérabilité. Comment peut-on exactement contourner `mysql_real_escape_string()` ? Et surtout