«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Может ли SQL -инъекционный обход `mysql_real_escape_string ()` из -за проблем кодирования символов?

Может ли SQL -инъекционный обход `mysql_real_escape_string ()` из -за проблем кодирования символов?

Опубликовано в 2025-02-20
Просматривать:621

Can SQL Injection Bypass `mysql_real_escape_string()` Due to Character Encoding Issues?

используйте проблему кодирования символов, чтобы обойти инъекцию SQL mysql_real_escape_string ()

]

Хотя функция mysql_real_escape_string () предотвращает инъекцию SQL, она может быть обошщена в некоторых случаях.

]

рассмотрим следующий код PHP:

]
$login = mysql_real_escape_string(GetFromPost('login'));
$password = mysql_real_escape_string(GetFromPost('password'));

$sql = "SELECT * FROM table WHERE login='$login' AND password='$password'";
]

Этот код кажется безопасным, но он может быть использован из -за края кодирования набора символов.

]

Метод атаки:

атаки зависят от следующих шагов:

]
    ]
  1. установить набор символов: выберите кодирование (например, GBK), где одна и та же байтовая последовательность представляет как не ASCII, так и ASCII BackSlash ('\').
  2. ]
  3. ] ]
  4. call
  5. mysql_real_escape_string () : клиент считает, что соединение использует другой набор символов (например, latin1), так что mysql_real_escape_string () будет одиноким Вставьте обратную черту перед кавычками, что приводит к синтаксически допустимой строке. ]
  6. отправить Query:
  7. сбежавшая полезная нагрузка становится частью оператора SQL, позволяя злоумышленнику обходить ожидаемую защиту. ] ]

задача ключа заключается в том, что набор символов, ожидаемый сервером, не соответствует набору символов, рассмотренному клиентом. Хотя mysql_real_escape_string () сбегается на основе кодирования соединения, установленного клиентом, в некоторых случаях он рассматривает недействительные мультибитные символы как один байт, включая использование

установить имена

вместо ] mysql_set_charset () case. ] в результате:

эта атака может обойти моделируемый оператор предварительной обработки PDO, даже если смоделированный оператор предварительной обработки отключен. ]

Средство:

используйте не Vulnerable наборы символов, такие как UTF8MB4 или UTF8, чтобы смягчить эту проблему. Включение no_backslash_escapes SQL Mode также обеспечивает защиту. ]

безопасный пример:

всегда устанавливайте набор символов правильно, используя mysql_set_charset () или PDO DSN набора символов. Реальные заявления о предварительной обработке в MySqli также невосприимчивы к этой атаке.

]

в заключение:

while mysql_real_escape_string () обычно обеспечивает сильную защиту, важно знать о таких потенциальных случаях, чтобы обеспечить полную защиту от инъекции SQL.

]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3