Достаточно ли шестнадцатеричного ввода для очистки запросов SQL?
Прошлой ночью я читал о предотвращении SQL-инъекций и наткнулся на этот ответ:
Как я могу предотвратить внедрение SQL в PHP?
В комментариях к «Твоему здравому смыслу» это звучало так, как будто это было неблагополучно / небезопасно. Тем не менее, в моем (хотя и ограниченном) тестировании я обнаружил, что php «bin2hex ($ var)» работает со всем, что я на него бросил - литеральным числом, числовой строкой, текстовой строкой - даже при сопоставлении с числовым столбцом (tinyint).
У меня такой вопрос: есть ли способ ввести SQL, когда каждый пользовательский ввод очищается с помощью его шестнадцатеричного кода? По сути, каждый раз, когда был сделан запрос, он будет выглядеть примерно так:
$query="SELECT * FROM table WHERE someidentifier=UNHEX('".bin2hex($unsafe_user_input)."') LIMIT 1"
В основном перевод на:
SELECT * FROM table WHERE someidentifier=UNHEX('0b99f') LIMIT 1
Есть ли дыры в этом типе безопасности?
PS - я не просто ищу ответы типа "Почему бы просто не использовать PDO или MySQLi с подготовленными утверждениями?" Это может подпасть под огромное зло упреждающей оптимизации, но я бы предпочел не удваивать накладные расходы на мой запрос (и да, я понимаю, что это может быть быстрее с несколькими одинаковыми запросами, но я не часто сталкиваюсь с такой ситуацией).