Многобайтовая SQL-инъекция
Это очень часто обсуждаемая проблема, я знаю, но недавно я обнаружил эту уязвимость, и я проверяю, устойчив ли я к такой инъекции, однако я не могу имитировать такое поведение. Возможно, я не понимаю, какой запрос они используют.
Часть, которая меня интересует:
Первая уязвимость затрагивает семейство функций mysql_real_escape_string(), которое не отклоняет недопустимые многобайтовые символы. Например, в UTF-8 строка "0xC8 'attackersql" или "0xC8 \ ' attackersql" преобразуется в "one_character ' attackersql" (игнорируя пробелы). Итак, запрос:
SELECT... WHERE v = 'mysql_real_escape_string ("0xC8' attackersql") '
становиться:
ВЫБРАТЬ... ГДЕ v = '0xC8' 'attackersql'
SELECT... WHERE v = 'one_character' attackersql '
Таким образом, злоумышленник может ввести команду attackersql.
Вопрос звучит довольно глупо, но как я могу заставить эту инъекцию работать?
Примечание (отредактировано): я использую PHP 5.2.6, MySQL 5.0.51a (исправление), и для соединения с БД установлена кодировка 'utf8'.