В этой статье рассказывается о разнице между использованием mysql_real_escape_string для сортировки и обработки данных, отправленных пользователем, и использованием трех аналогичных функций: addslashes и mysql_escape_string. Экранированные данные можно вставить непосредственно в базу данных.
Это хорошее объяснение разницы между addslashes и mysql_real_escape_string. Хотя многие отечественные PHP-кодеры по-прежнему полагаются на addslashes для предотвращения SQL-инъекций (включая меня), я все же рекомендую всем усилить проверки для предотвращения SQL-инъекций на китайском языке. Проблема с addslashes заключается в том, что хакеры могут использовать 0xbf27 для замены одинарных кавычек, тогда как addslash меняет только 0xbf27 на 0xbf5c27, что становится допустимым многобайтовым символом. 0xbf5c по-прежнему рассматривается как одинарная кавычка, поэтому addslash не может успешно перехватиться.
Конечно, addslashes не бесполезен. Он используется для обработки однобайтовых строк. Для многобайтовых символов используйте mysql_real_escape_string.
Кроме того, для примера get_magic_quotes_gpc в руководстве PHP:
если (!get_magic_quotes_gpc()) {
$lastname = addslashes($_POST['lastname']);
} еще {
$lastname = $_POST['lastname'];
}
Лучше всего проверять $_POST['lastname'] когда Magic_quotes_gpc уже открыт.
Давайте поговорим о разнице между двумя функциями mysql_real_escape_string и mysql_escape_string:
mysql_real_escape_string можно использовать только в том случае, если (PHP 4 >= 4.3.0, PHP 5). В противном случае вы можете использовать только mysql_escape_string. Разница между ними:
mysql_real_escape_string учитывает текущий набор символов соединения, а mysql_escape_string — нет.
Подводя итог:
addslashes() — принудительное дополнение;
mysql_real_escape_string() определяет набор символов, но существуют требования к версии PHP;
mysql_escape_string не учитывает текущий набор символов соединения.