绕过mysql_real_escape_string()的SQL注入——如何防护?
大家好!我是一名初学PHP的开发者,有一个问题一直困扰着我。我读到过`mysql_real_escape_string()`(或其类似函数`mysqli_real_escape_string()`)被认为是防范SQL注入的可靠方法。但最近我在Stack Overflow上看到一个老帖子,声称它可以被绕过。
在我的项目中,我使用了过时的`mysql_*`扩展(我知道它已被弃用,但项目很旧,暂时无法全部重写为PDO)。以下是我的代码示例:
```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);
```
我天真地以为转义引号之类的字符就足够了。但那个讨论中提到了编码、多字节字符以及某种与`GBK`相关的魔法。我不太明白这个漏洞的本质。如何具体绕过`mysql_real_escape_string()`?最重要的是