Joomla 1.5 LIKE и подчеркивания — лажа $db->Quote()

Тема в разделе "Вопросы безопасности", создана пользователем sergiks, 05.07.2011.

  1. sergiks
    Offline

    sergiks Недавно здесь => Cпециалист <=

    Регистрация:
    10.10.2010
    Сообщения:
    362
    Симпатии:
    36
    Пол:
    Мужской
    Наткнулся сейчас на одно несовершенство в Joomla 1.5, а именно: JDatabase::Quote() не ескейпит символы % и _

    Что это значит на практике

    Символы % и _ заменяют собой "сколько угодно" и "один" любой символ — как * и . в регулярных выражениях — в SQL запросах с использованием LIKE. Например запрос
    Код (CODE):
    1. SELECT id FROM jbj_users WHERE email LIKE '%vassia%'
    находит вам всех пользователей с эл. почтой похожей на vassia, причем, что-то еще может быть как до, так и после этой подстроки: vassia@mail.ru и NEVAssia@yandex.ru — все попадут в ощип.

    Обычно подстроку для поиска получают из заполненной пользователем формы:
    Код (PHP):
    1. $search = JRequest::getVar('search');
    и затем ее квотят и подают в запрос:
    Код (PHP):
    1. $query = 'SELECT id FROM jbj_users WHERE email LIKE ' . $db->Quote($search);

    Вот тут и получается, что если у человека адрес почты v_v_n@bk.ru , а в системе уже есть vovan@bk.ru , то может случиться, что новому откажут в регистрации под предлогом того, что такой адрес уже зарегистрирован.

    Где собака порылась

    JDatabase::Quote() вызывает для грязной работы функцию getEscaped(), принимающую два параметра. Второй — необязательный, по умолчанию false, как раз включает дополнительный escape % и _. Но он пропущен в вызове и потому всегда выключен.
    getEscaped() в свою очередь, переопределяется в JDatabaseMySQL и JDatabaseMySQLi. В обоих случаях, при включенном втором параметре, результат просто обрабатывается дополнительно стандартной функцией PHP addcslahses:
    Код (PHP):
    1. $result = addcslashes( $result, '%_' );

    Так что при желании, можно просто добавить эту строку в свой код, и тогда V_v_n и Vovan смогут жить дружно на одном сайте.
     
  2.  

Поделиться этой страницей

Загрузка...