Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: sql injection - возможен ли DROP
$stmt=$this->connection->prepare("INSERT INTO ".$this->my_canal." (login, text) values (?, ?)") or exit(' :( ');
Спасибо заранее .
нет
Мелкий
Отправлено: 12 Марта, 2019 - 17:02:30
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Зависит от того, что такое $this->my_canal и где меняется, а так же от самого $this->connection - вы не написали что это.
----- PostgreSQL DBA
iv888
Отправлено: 12 Марта, 2019 - 17:12:46
Новичок
Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2019
Помог: 0 раз(а)
andrewkard, благодарю
Мелкий, благодарю
$this->my_canal это protected алиас для переменной $canal, а $canal - это $_GET['canal'], которая устанавливается пользователем. Попадет в класс через метод и там выполняется вышеуказанный код.
Если такого канала нет, то устанавливается $this->my_canal = 'first_canal'
Могу показать весь листинг.
Суть в том, что пользователь может ввести любые значения в input canal
(Вывод и внедрение данных в данном случае не страшно) ... Главное DROP
Мелкий
Отправлено: 12 Марта, 2019 - 17:28:30
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Теоретически ничто не мешает.
Например для pdo_pgsql проверил - можно и drop table сделать, были бы права у пользователя.
Это в целом плохая мысль использовать пользовательские данные в качестве имени таблицы.
----- PostgreSQL DBA
iv888
Отправлено: 12 Марта, 2019 - 17:53:41
Новичок
Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2019
Помог: 0 раз(а)
Там суть в том, что кроме каналов нет ничего в БД.
userlogin - только имя отправленное пользователем - произвольное.
Да, проверил просто DROP из php, похоже, можно DROP.
Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014
Помог: 30 раз(а)
Проверить по белому списку
Мелкий
Отправлено: 12 Марта, 2019 - 18:28:53
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
andrewkard пишет:
с подготовленным запросом можно выполнить drop table ? Вернее втыкнуть инъекцию?
А что вас собственно удивляет?
Если продолжать конкатенировать запрос с данными - то ничего не изменится. prepared statement не серебряная пуля, а лишь транспорт.
Я отдельно уточнил где проверял, потому что на сколько помню в pdo_mysql намеренно отломаны мультизапросы. При том именно из-за безалаберного отношения авторов кода (не могу назвать разработчиками) к sql инъекциям. А про другие драйвера вовсе ничего сказать не могу.
iv888 пишет:
но переменная для выбора таблицы не вписывается в модель prepared statement.
Этот мой комментарий относился именно к вашей модели данных.
Использовать пользовательский ввод в качестве имени объекта - идея плохая и так быть не должно.
----- PostgreSQL DBA
iv888
Отправлено: 12 Марта, 2019 - 18:41:27
Новичок
Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2019
Помог: 0 раз(а)
andrewkard пишет:
Проверить по белому списку
Это есть, но для снижения нагрузки хотелось бы отключить эту опцию (Добавление)
iv888 пишет:
andrewkard пишет:
Проверить по белому списку
Это есть, но для снижения нагрузки хотелось бы отключить эту опцию
Цитата:
Этот мой комментарий относился именно к вашей модели данных.
Использовать пользовательский ввод в качестве имени объекта - идея плохая и так быть не должно.
Делать отдельную таблицу сопоставления?
Дело в том, что сейчас так удобно создавать новые каналы ...
Вообще тогда исходя из сказанного Мелким, получается на выбор таблицы надо делать
switch
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Гипотеза: у вас некоторое число таблиц идентичной структуры.
Почему я так подумал: если бы структуры были различны - у вас бы не стояло вопроса как проверять имя таблицы, а выбор был бы детерминирован.
Вывод: это должна быть одна таблица. Имя искусственного водного пути (хотя при чём тут водные пути? Но canal это именно оно) - такой же параметр запроса, а не имя таблицы.
В итоге вы ищите проблему там где её нет, просто соорудив странную схему базы.
----- PostgreSQL DBA
iv888
Отправлено: 12 Марта, 2019 - 20:43:30
Новичок
Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2019
Помог: 0 раз(а)
Цитата:
Гипотеза: у вас некоторое число таблиц идентичной структуры.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.