powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
21 сообщений из 21, страница 1 из 1
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39956765
jango77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте

Нужно передать список ID продуктов и получить в одном е данные по всем им

Подскажите, пожалуйста, каким наиболее безопасным образом реализовать хранимую процедуру в MariaDB такой логики:

Код: sql
1.
2.
3.
4.
5.
6.
CREATE PROCEDURE GetProductList(IN product_ids VARCHAR(255))
BEGIN

    SELECT * FROM TableA WHERE productID IN ( product_ids  )

END



Есть предположение использовать такую логику:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE PROCEDURE GetProductList(IN product_ids VARCHAR(255))
BEGIN

SET @s = ' SELECT * FROM TableA WHERE productID IN ( ? ) '

PREPARE stmt FROM @s;
EXECUTE stmt USING @product_ids ;

END //;
DELIMITER

END
...
Рейтинг: 0 / 0
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39956998
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jango77,

от каких инъекций?
...
Рейтинг: 0 / 0
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39957035
jango77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя, SQL инъекций. Но возможно Вы хотели что-то боле конкретное?
...
Рейтинг: 0 / 0
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39957043
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jango77
вадя, SQL инъекций. Но возможно Вы хотели что-то боле конкретное?
да именно конкретнее.
потому как хранимки позволяют сделать 2 или 3 вида инъекций, чтоб от их защититься много усилий не надо, надо просто их знать
...
Рейтинг: 0 / 0
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39957054
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jango77,

что будет выводить
Код: sql
1.
2.
3.
4.
5.
6.
CREATE PROCEDURE GetProductList(IN product_ids VARCHAR(255))
BEGIN

    SELECT * FROM TableA WHERE productID IN ( product_ids  )

END


при 1,2,3 на входе , если известно что такие id есть?
...
Рейтинг: 0 / 0
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39957063
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
SELECT * FROM TableA WHERE FIND_IN_SET( productID, product_ids  )
...
Рейтинг: 0 / 0
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39957065
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

зачем подсказки?
...
Рейтинг: 0 / 0
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39957100
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так - будем ещё неделю сопли жевать... просто за сегодня на разных форумах (включая англоязычные) аншлаг вопросов именно по этой теме, и никто мануалов не читал, причём, похоже, принципиально, и возможностей языка даже не представляет, так что ответы вылетают, считай, на автомате.

Всё равно основной вопрос, насчёт инъекций, остался. Ты попытай товарища, как он себе инъекцию представляет, и вообще, и в этом конкретном случае - авось таки повеселимся.
...
Рейтинг: 0 / 0
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39957107
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Ты попытай товарища, как он себе инъекцию представляет, и вообще, и в этом конкретном случае - авось таки повеселимся.
я и пытался
вадя
jango77,

от каких инъекций?


автор просто за сегодня на разных форумах (включая англоязычные) аншлаг вопросов именно по этой темесессия близко?
...
Рейтинг: 0 / 0
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39957134
jango77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сессия близко?

Последняя закончилась лет 10 назад

SELECT * FROM TableA WHERE FIND_IN_SET( productID, product_ids )

Также читал про такое решение, но отзывы были не в пользу защищенности такого способа. Якобы в него можно передать UNION инъекцию

Имел ввиду Конкатенацию строк и UNION, но прошу не судить строго. Раньше использовали параметры с точным INT значением в процедурах, не приходилось обращаться к защите от инъекций. Но теперь возникла задача с использованием оператора IN. Потому решил разузнать поподробней


По типам инъекций читал здесь https://defcon.ru/web-security/2784/
Информации много. Потому надеюсь на помощь, чтобы покрыть максимальное количество рисков
...
Рейтинг: 0 / 0
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39957135
jango77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На самом деле по задаче параметр сравнивает не INT, а строковое значение в поле

Код: sql
1.
IN product_names VARCHAR(255))
...
Рейтинг: 0 / 0
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39957149
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jango77,

надо читать грамотно, и проверять.
ну и понимать, что такое хранимая процедура.
вадя
jango77,

что будет выводить
Код: sql
1.
2.
3.
4.
5.
6.
CREATE PROCEDURE GetProductList(IN product_ids VARCHAR(255))
BEGIN

    SELECT * FROM TableA WHERE productID IN ( product_ids  )

END



при 1,2,3 на входе , если известно что такие id есть?
есть ответ?
для начала
...
Рейтинг: 0 / 0
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39957155
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jango77
Также читал про такое решение, но отзывы были не в пользу защищенности такого способа. Якобы в него можно передать UNION инъекцию
Блин, расскажи - как? хочу знать!!!

jango77
По типам инъекций читал здесь https://defcon.ru/web-security/2784/
Информации много. Потому надеюсь на помощь, чтобы покрыть максимальное количество рисков
Так это всё - про тех идиотов, которые получают от юзера ввод и, не глядя, втыкают его прямо в текст запроса!
...
Рейтинг: 0 / 0
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39957600
jango77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть ответ?
для начала

Да, отрабатывает как нужно

Блин, расскажи - как? хочу знать!!

В какой-то из тем на stackover. Но мог что-то не верно понять. Тот вопрос не нашел

Верно понял, функция FIND_IN_SET делает необходимую защиту от инъекций? Передаю в нее строковый параметр с названиями продуктов
...
Рейтинг: 0 / 0
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39957701
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jango77,
автор
Код: sql
1.
SELECT * FROM TableA WHERE productID IN ( product_ids  /* varchar255 */)


при "1,2,3" отрабатывает как надо?
авторДа, отрабатывает как нужно вы не проверили даже

весь прикол ответов-вопросов выше заключается в том что для входящего char-параметра (IN product_ids /* varchar255 */) используется FIND_IN_SET иначе запрос работать не будет
по-моему максимум отработает как
Код: sql
1.
SELECT * ................ WHERE productID = 1


мозги запудрили вам и ничего не сказали толком об инъекциях...
почитайте о mysql_escape_string (неважно - mysql_, pdo_, mysqli_ или mysql_real_.....)
...
Рейтинг: 0 / 0
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39957703
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jango77
Верно понял, функция FIND_IN_SET делает необходимую защиту от инъекций?
Нет, конечно. Инъекция - это модификация текста запроса. Однако все давным-давно используют параметры, которые не являются текстов запроса, и в которые можешь хоть объинъектироваться...
...
Рейтинг: 0 / 0
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39957718
jango77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinov
вы не проверили даже


Проверил. Действительно отработал в правильным результатом.

Alex_Ustinov

почитайте о mysql_escape_string (неважно - mysql_, pdo_, mysqli_ или mysql_real_.....)


Хорошо. спасибо за совет
...
Рейтинг: 0 / 0
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39957724
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jango77,

jango77Проверил. Действительно отработал в правильным результатом здесь не верю. Либо мы о разных запросах.
если не лень - пример того что передаете в процедуру.
запрос
Код: sql
1.
select m.id from MyTable as m where m.id in ("1,2,3")

не может дать
Код: plaintext
1.
2.
3.
m.id
1
2
3
...
Рейтинг: 0 / 0
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39957746
jango77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
здесь не верю. Либо мы о разных запросах.
если не лень - пример того что передаете в процедуру.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
DROP PROCEDURE IF EXISTS GetData;

DELIMITER $$
CREATE PROCEDURE GetData(IN proj VARCHAR(255))

BEGIN

    SELECT DISTINCT name FROM Table WHERE FIND_IN_SET (name, proj);

END $$;


CALL GetData('Telegram,Whatsapp,Amo')



Возвращает
Код: plaintext
1.
2.
Telegram
WhatsApp

Amo отсутствует в поле name
...
Рейтинг: 0 / 0
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39957755
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос Вади был о WHERE IN (Varchar) а не о FIND_IN_SET
авторjango77,

что будет выводить
CREATE PROCEDURE GetProductList(IN product_ids VARCHAR(255))
BEGIN

SELECT * FROM TableA WHERE productID IN ( product_ids )

END

при 1,2,3 на входе , если известно что такие id есть?
поэтому и было предположение, что вы ничего не проверяли, выдав заведомо неправильный запрос с WHERE IN ()
...
Рейтинг: 0 / 0
Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
    #39957978
jango77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinov
вопрос Вади был о WHERE IN (Varchar) а не о FIND_IN_SET


Понял. Спасибо всем за помощь в вопросе
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как избежать риска инъекций в хранимой процедуре при использовании WHERE IN
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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