Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск по бд / 9 сообщений из 9, страница 1 из 1
23.03.2016, 06:58
    #39198455
WapxaZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по бд
Доброго времени суток. Проблема с организацией поиска, помогите разобраться.
Код:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
public function getProductsFromSearch($searchStr = '', $limit = '', $offset = '', $where = '')
    {

        require_once 'Zend/Session.php';
        $city_now = new Zend_Session_Namespace('Zend_City');
        if (!$city_now->city) {
            $city_now->city = 2;
        }
        if ($city_now->city == 1) {
            $where_active_city = ' and p.active_nk=1';
        } else {
            $where_active_city = ' and p.active_kem=1';
        }		
		 return self::find(
            'all',
            array(
                'select' => 'p.*, b.title as brand_title, b.image ',
                'from' => 'ind_product as p',
                'joins' =>
                    '	LEFT JOIN ind_category_product as cp ON p.id_product=cp.id_product
				
				LEFT JOIN ind_brand as b ON p.id_brand=b.id_brand
			',
                'conditions' => 'UPPER(p.title) like UPPER("%' . $searchStr . '%")
						     ' . $where . '  and p.title!="" and p.active=1 and cp.id_category is not null' . $where_active_city,
                'limit' => $limit,
                'offset' => $offset,
                'group' => '  p.id_product '

            )
    }



Строка для поиска, например "searchStr "= Светодиоды для воздушных шаров, выдает следующие результаты:
FM 34 Медвежонок в шарфике
Зажим для шарика БЕЛЫЙ 100 шт
AN 26" ФИГУРА/P35 HB Сюрприз с шарами
AN 30" ФИГУРА/P30 Смешарики Крош

Почему выводится "FM 34 Медвежонок в шарфике"? Как подправить чтоб выводилось четкое соответствие?
...
Рейтинг: 0 / 0
23.03.2016, 07:16
    #39198457
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по бд
WapxaZ,

покажите текст запроса, а не гкод, его формирующий.
...
Рейтинг: 0 / 0
23.03.2016, 08:12
    #39198468
WapxaZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по бд
tanglir,

это то что осталось от предыдущих разработчиков, большей информацией не владею
...
Рейтинг: 0 / 0
23.03.2016, 11:01
    #39198585
kormot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по бд
Включи логирование выполняемых запросов. Можно не для всего сервера БД, а в PHP например в методе find того класса, отрывок которого ты привёл в 1-м посте.
...
Рейтинг: 0 / 0
23.03.2016, 11:09
    #39198604
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по бд
WapxaZtanglir,

это то что осталось от предыдущих разработчиков, большей информацией не владеюРазбирайте код, смотрите что реально выполняет self::find().
И либо настройте логирование запросов в MySQL, либо сделайте его самостоятельно где-то внутри self::find().
...
Рейтинг: 0 / 0
23.03.2016, 11:29
    #39198626
kormot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по бд
У меня тут немного офтоп, но выходящий из этого вопроса.
Знающие, подскажите по примеру ТС в частности тут:
Код: php
1.
                'conditions' => 'UPPER(p.title) like UPPER("%' . $searchStr . '%")


И из этого массива потом как я понимаю формируется итоговый SQL запрос.
Так вот если рассмотреть этот конкретно кусок передаваемый на формирование из него запроса, то параметр $searchStr туда вставляется без какого-либо экранирования. Нет ли тут потенциала для SQL-инъекций?

Как я понимаю SQL инъекции тут можно избежать в двух случаях:
- или этот параметр передаётся уже экранированным в этот метод ( getProductsFromSearch() )
- или в методе find() этого класса производится синтаксический разбор параметра 'conditions' с вычленением из него параметров, которые должны быть экранированы, экранированием их и состряпывание обратно строки conditions.

Второй вариант конечно совсем ад. Да и к тому же не помогающий при правильно оформленной инъекции.

Сам с Zend'ом не работал, поэтому интересно у тех кто эту кухню знает спросить.

ТС можешь проверить введя в качестве поискового параметра $searchStr= ' Запрос с кавычками " '
Должен выдать ошибку если инъекция возможна.

Просто реально интересно.
...
Рейтинг: 0 / 0
23.03.2016, 11:34
    #39198635
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по бд
kormotВторой вариант конечно совсем ад.Поэтому его никто нигде не реализует (если ошибаюсь, давайте названия. мне самому интересно). Скорее всего первый, а там уже всё зависит от радиуса кривизны кода, формирующего эту строку.
...
Рейтинг: 0 / 0
23.03.2016, 11:48
    #39198647
kormot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по бд
tanglirПоэтому его никто нигде не реализует (если ошибаюсь, давайте названия. мне самому интересно)
Такой я не встречал, а вот похожий но технологически конечно более правильный - во всяких компонентах PDO или Doctrine используются. Когда запрос похожим образом описывается, но только все аргументы там передаются в виде именно аргументов, которые уже самой библиотекой экранируются при составлений запроса.

А тут какая-то мешанина из составления запроса, только путём склеивания готовых кусков SQL кода.
...
Рейтинг: 0 / 0
24.03.2016, 10:10
    #39199322
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по бд
Модератор: Оффтоп вынес в отдельную тему .
Если напутал и потерял чей-то пост - пишите.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск по бд / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]