绕过mysql_real_escape_string()的SQL注入——如何防护?
大家好!我是一名初学PHP开发者,遇到了一个非常奇怪的情况。很多论坛都说`mysql_real_escape_string()`函数是防止SQL注入的可靠方法,我也一直用它。但最近我读到有办法绕过它,这让我非常害怕。
我有一个简单的用户登录代码:
```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或SJIS),就可以构造一个字符序列来“吃掉”转义反斜杠,从而插入任意SQL代码。这是真的吗?具体是怎么工作的?最重要的是,我现在应该如何正确保护我的查询?难道