Чтобы избежать SQL-инъекций, я провел некоторые исследования и на основе этого ответа начал использовать подготовленные MySQLi утверждения. Все шло нормально, пока я не перешел к параметрам order by и order type, которые отправляются из внешнего интерфейса в зависимости от того, что нажимает пользователь. Если быть более конкретным, у меня есть несколько таблиц с заголовками, и пользователь может упорядочить данные с учетом имени, цены, даты и т. д., а также он может выбирать между ASC или DESC. Я сохраняю это в каком-то скрытом типе ввода, поэтому думаю, что они смогут изменить это с помощью firebug. Поэтому мне нужно быть уверенным, что они не смогут ничего внедрить в мою базу данных.
Код: Выделить всё
$stmt = $dbConnection->prepare('SELECT * FROM mytable WHERE 1 ORDER BY ? ?');
$stmt->bind_param('ss', $_GET['order_by'], $_GET['order_type']);
Похоже, у меня возникла ошибка. Я провел некоторые исследования, и кто-то сказал, что для этого нет решения, другой человек сказал, что единственное решение жестко запрограммировано, а другой человек сказал, что мне нужно отказаться от использования подготовленных операторов и попробовать mysql_real_escape_string, но в ответе, который я связал кто-то скажет:
Если вы используете последнюю версию PHP, опция mysql_real_escape_string
, описанная ниже, больше не будет доступна
Поэтому я думаю, что это тоже не тот путь. Итак, у меня остается вопрос: что мне делать дальше? Есть ли решение этой проблемы?
Подробнее здесь:
https://stackoverflow.com/questions/404 ... statements