SQL-инъекция в штрих-коде?
А вот ещё идея возникла. Распечатываете этот
штрих-код на стикеры, и незаметно клеите их рядом с ценниками в супермаркетах конкурента.Когда в конце рабочего дня будут производить учет товаров
какой-нибудь доброход-товаровед обязательно посветит на негоштрих-код сканером. :)А там написано *’; DROP TABLE products; —*
P.S. Я и сам принимал участие в разработках программ складского учета с применением сканеров штрихкода. И знаю — никто там, естественно, входные данные не проверяет, чаще всего шпарят прям напрямую запросы с динамическими параметрами
в SQL-базу. А теперь вот задумался,прогресс-то не стоит на месте… :)
Забавно, неужели правда сработает?
Читайте также

2025
Всякая мелочь одним постом-5
Как-то тихо и незаметно был принят новый перечень технически сложных товаров, в который включено «оборудование навигации и беспроводной связи для бытового использования с сенсорным экраном», то есть смартфоны, так же туда попали телевизоры, игровые приставки и некоторая другая бытовая техника. То есть вернуть их в магазин теперь можно только если вы нашли существенный недостаток или дефект.
2011
Комментарии 29
Это далеко не самая забавная уязвимость, которую при помощи JPEG/EXIF можно найти :)
Я уверен, что
в обмен между терминалом и основной БД инъекция точно не попадёт — там синхронизация по внутренним артикулам товаров, а не по штрихкоду.
1. Сканер не работает с базой напрямую. ТСД например имеет свою базу, и только потом обмен с базой сервера. При WiFi режиме — обмен идет через процедуры, которые вряд ли пропустят. Да и обмен идет не по штрихкодам, а артикулу или ID товара в базе.
2. Сканер читает штриховой код
3. Есть административное и четкое указание какой код читать, ну по крайней мере в тех организаций, с которыми я сталкивался. Читается всегда код с товара, а не с ценника. Во первых не ценник несут на кассу, а товар, во вторых — ценника может и не быть.
4. Видно что код не тот. На кодах магазина внизу пишут артикул, как правило, тут его нет.
На кассе тоже маловероятно….
http://www.irongeek.com/i.php?page=securit … e%2BReader
Давайте подробнее
Настенные терминалы, которые говорят тебе цену по штрихкоду — прекрасная цель
insert into a (col_a, col_b) values (?, ?)
select * from products where prod_id = ?
Все параметры передаются отдельно и корректно обрабатываются.
По другому пишет только школьники.
procedure TForm1.CoolProc (s: string; id: integer);
begin
pFIBQuery1.SQL.Text := 'update GOODS set name=:name where id=:id';
pFIBQuery1.ParamByName ('name').Value := s;
pFIBQuery1.ParamByName ('id').Value := id;
pFIBQuery1.ExecQuery;
end;
Комментарий для iphonenews.ru:
Отсюда, какбэ, следует, что MySQL — нормальная БД.
Ну, то есть, как я и предполагал, это пример из API биндинга. То есть от СУБД это не зависит.
Но в MySQL есть «динамические параметры» (parameters markers/placeholders) на уровне API самой СУБД: http://dev.mysql.com/doc/refman/5.1/en/mys … param.html и на уровне самой СУБД http://dev.mysql.com/doc/refman/5.1/en/sql … ments.html
Комментарий для Евгения Степанищева:
Зависит. В данном случае это обертка вызовов API клиентской библиотеки СУБД.
sql-инъекции?
Если в MySQL есть динамические параметры, почему их не используют, а формируют текст запросов вручную и постоянно нарываются на
Нет, от СУБД это не зависит, так как это вполне можно делать в биндинге. Для некоторых СУБД это делается именно в биндинге, а то и выше, на уровне приложения.
Почему люди не делают как правильно? О, ну сотни причин. Неправильно проще, они не читали документацию, они не заморачиваются с обеспечением безопасности и ещё сотни минус три причины.
Что такое этот загадочный биндинг? И как в PHP использовать эти динамические параметры?
Комментарий для iphonenews.ru:
Смотря о каком из значений этого слова вопрос. «Биндинг» = «привязка».
В документации же есть. Откуда, кстати, такой термин, «динамические параметры»? В первый раз слышу.
http://ru2.php.net/manual/en/mysqli-stmt.bind-param.php и http://ru2.php.net/manual/en/pdostatement.bindparam.php
Не помню, где я в первый раз услышал «динамические параметры». Общеупотребительный термин. А я про биндинг впервые слышу. Видимо, программирование приложений БД и программирование в интернете разные миры.