пояснения
Misha v.3 01.05.2008 01:20
/ 04.05.2008 16:34
итак, в связи с поднятой темой некоторые попытались воспроизвести sql-injection и... воспроизвели.
собственно проблема в том, что в находящемся в настоящее время в разделе скачать драйвере возможно в рамках одной sql инструкции указать несколько запросов, и все они выполнятся (в принципе для некоторых это может быть и хорошо).
дальше начали выясненять момент, в который уровень защиты при работе с SQL у парсера понизился и то, насколько именно он понизился.
уровень защиты понизился с релизом обновлённого драйвера mysql, в котором была добавлена возможность вызова хранимых процедур. этот релиз совпал с релизом парсера версии 3.2.2. в присланном патче вместо константы CLIENT_MULTI_RESULTS была указана константа CLIENT_MULTI_STATEMENTS, которая не только позволяет выполнять хранимые процедуры, но и позволяет в одной инструкции отправлять серверу несколько sql запросов. увы, перед включением этого патча я не сверился с документацией и не проверил всё самолично.
теперь об уровне понижения защиты: в случае, если вы писали в ваших SQL запросах конструкции вида "...where id=$form:id...", то в вашей системе в любом случае была уязвимость и злоумышленник мог ей пользоваться даже с драйвером без данного патча. однако в случае, если данные конструкции содержатся в ваших sql запросах и вы работаете с драйвером с данным патчем, то возможности по использованию sql-injection злоумышленником несколько расширяются.
если же вы при написании sql запросов, в случае подстановки в них данных поступивших из внешних источников, строчные данные заключали в апострофы ("...where uid='$form:uid'..."), а числовые данные или явно преобразовывали к числам, как это рекомендуется в документации и не раз упомяналось в форуме ("...where id=^form:id.int(0)..."), или заключали в апострофы ("...where id='$form:id'..."), то ни со старой версией драйвера ни с новой ваш код не подвержен обсуждаемой тут sql-injection.
UPDATE:- правки в драйвер внесены. всё есть в cvs (HEAD и branch release_9_6).
- в раздел
скачать выложены новые версии mysql драйвера для всех систем.
- инсталлятор для win32 пересобран (больше в нём ничего не менялось).
- добавлена опция ?multi_statements=1, которая включает этот самый multi statements (вдруг кому нужно).
если вы не уверены в своём коде (подробности см. выше), то рекомендуется обновить mysql драйвер с версии 9.5 на 9.4 или 9.6, если уверены -- делать ничего не требуется.