Мы все знаем, что мы должны использовать подготовленные инструкции или соответствующие правила замены/форматирования, чтобы предотвратить внедрение SQL в наших приложениях.
Однако, взглянув на список символов символов mysql, я заметил, что он включает в себя следующие символы:
- \0 Символ ASCII NUL (0x00).
- \ "Символ одиночной кавычки (" ").
- \ "Символ двойной кавычки (" "").
- \b Обратный символ.
- \n Символ новой строки (linefeed).
- \r Символ возврата каретки.
- \t Символ табуляции.
- \Z ASCII 26 (Control + Z). См. Примечание, следующее за таблицей.
- \\Символ обратной косой черты ( "\" ).
- \%Символ "%".
- \_ Символ "_".
Теперь, когда символы% и _ должны быть экранированы, чтобы предотвратить включение нежелательных групповых символов в операторы LIKE, а в то время как '(одинарная кавычка),\(обратная косая черта) и "(двойная кавычка), все должны чтобы избежать инъекции произвольного SQL - может ли любой из этих других персонажей, не привязанных к экрану, привести непосредственно к уязвимости SQL-инъекции, которая иначе не присутствовала бы? Есть ли у кого-нибудь реальные примеры такого эксплойта?
Предположим, что мы строим наш запрос следующим образом:
SELECT * FROM users WHERE username='$user'
Есть ли какое-либо значение для $user, где единственными лимитированными символами без символов являются \b (backspace),\0 (NUL),\n (новая строка),\r (строка),\t (вкладка) или \Z (Ctrl + Z), который позволяет вводить произвольный SQL в этот запрос?