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