powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск по бд
9 сообщений из 9, страница 1 из 1
Поиск по бд
    #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
Поиск по бд
    #39198457
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WapxaZ,

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

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

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


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

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

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

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

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

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

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


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