powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Уязвимости, связанные с хранимыми процедурами
16 сообщений из 16, страница 1 из 1
Уязвимости, связанные с хранимыми процедурами
    #34300358
postuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие существуют уязвимости, связанные с наличием хранимых процедур? Пробую сейчас дать пользователям права в основном на выполнение процедур без доступа к таблицам. Т.е. все делать через ф-ии с параметром SECURITY DEFINER. В функции производятся различные UPDATE, INSERT и SELECT, а пользователю даю права на исполнение этих процедур.
Правильный ли это подход?
...
Рейтинг: 0 / 0
Уязвимости, связанные с хранимыми процедурами
    #34300372
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо, делать все только через функции это несколько утопично ) вполне можно реализовать разграничение доступа через вьюхи.
...
Рейтинг: 0 / 0
Уязвимости, связанные с хранимыми процедурами
    #34300784
postuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st_sergимхо, делать все только через функции это несколько утопично ) вполне можно реализовать разграничение доступа через вьюхи.
Я не совсем понимаю, чем отличается доступ к таблице через вьюху, которая имеет такиеже поля как в таблице от простого доступа с правами SELECT на саму таблицу? Когда скрывают столбцы или объединяют таблицы, то тут конечно понятно...
...
Рейтинг: 0 / 0
Уязвимости, связанные с хранимыми процедурами
    #34300856
ChameLe0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сервер приложений?
...
Рейтинг: 0 / 0
Уязвимости, связанные с хранимыми процедурами
    #34301083
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
postuserКогда скрывают столбцы или объединяют таблицы, то тут конечно понятно...
а говорите не понимаете :)
через вьюхи можно скрывать не только только столбцы, но и строки, с вьюхами планировщик может отработать лучше, лечге готовить тестовые данные, можно поменять внутреннюю структуру таблицы не трогая приложение (хотя последние два пункта в хранимках делать тож не трудно).
...
Рейтинг: 0 / 0
Уязвимости, связанные с хранимыми процедурами
    #34302216
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
postuserКакие существуют уязвимости, связанные с наличием хранимых процедур? Пробую сейчас дать пользователям права в основном на выполнение процедур без доступа к таблицам. Т.е. все делать через ф-ии с параметром SECURITY DEFINER. В функции производятся различные UPDATE, INSERT и SELECT, а пользователю даю права на исполнение этих процедур.
Правильный ли это подход?

немного не про БД, а из клиент-серверной теории.
сервер может работать в различных политиках безопасности...
1) максимальная... сервак работает от имени ядра. Требования к коду - повышенные.
2) минимальная... сервак работает от имени пользователя установившего коннект. Требования к настройки политики коннектов - возрастает.
3) средняя...когда сервак работает на коррекшенне от имени учётной записи созданной под него.

как правило третий вариант позволяет выбирать гибкость второго и избегать ненужных максимальных прав.

не слово, в слвоо - но мысль постарался передать...
"Программирование под Netware 386" - кажись оттуда...


с уважением
(круглый)
...
Рейтинг: 0 / 0
Уязвимости, связанные с хранимыми процедурами
    #34303100
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
postuserКакие существуют уязвимости, связанные с наличием хранимых процедур? Пробую сейчас дать пользователям права в основном на выполнение процедур без доступа к таблицам. Т.е. все делать через ф-ии с параметром SECURITY DEFINER. В функции производятся различные UPDATE, INSERT и SELECT, а пользователю даю права на исполнение этих процедур.
Правильный ли это подход?

Ну... по идее может быть банальный SQL Injection, если EXECUTE используеться. Я правда что-то не видел описания таких проблемм.... Может кто чего скажет о такой потенциальной проблемме?
...
Рейтинг: 0 / 0
Уязвимости, связанные с хранимыми процедурами
    #34303195
Andrey Daeron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jelis postuserКакие существуют уязвимости, связанные с наличием хранимых процедур? Пробую сейчас дать пользователям права в основном на выполнение процедур без доступа к таблицам. Т.е. все делать через ф-ии с параметром SECURITY DEFINER. В функции производятся различные UPDATE, INSERT и SELECT, а пользователю даю права на исполнение этих процедур.
Правильный ли это подход?

Ну... по идее может быть банальный SQL Injection, если EXECUTE используеться. Я правда что-то не видел описания таких проблемм.... Может кто чего скажет о такой потенциальной проблемме?
А чего? Потенциально - вполне может быть. Как завещал Том Кайт - используйте параметрические запросы, благо в Постгресе есть.
...
Рейтинг: 0 / 0
Уязвимости, связанные с хранимыми процедурами
    #34303332
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем... про SQL Injection

Быстрый эксперемент мной проведенный показал, что вполне возможно! Опишу чего я делал...

Табличка со странами

Код: plaintext
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.
jelis=> \d country
                                     Table "public.country"
    Column     |          Type           |                      Modifiers
---------------+-------------------------+------------------------------------------------------
 id            | integer                 | not null default nextval('country_id_seq'::regclass)
 name          | character varying( 8192 ) | not null
 short_name    | character( 3 )            | not null
 shortest_name | character( 2 )            | not null
Indexes:
    "pk_country" PRIMARY KEY, btree (id)
    "country_uq_idx" UNIQUE, btree (name)

jelis=> select * from country limit  10 ;
 id  |                     name                     | short_name | shortest_name
-----+----------------------------------------------+------------+---------------
    4  | Afghanistan                                  | AFG        | AF
    8  | Albania, People's Socialist Republic of      | ALB        | AL
  12 | Algeria, People's Democratic Republic of     | DZA        | DZ
   16  | American Samoa                               | ASM        | AS
   20  | Andorra, Principality of                     | AND        | AD
   24  | Angola, Republic of                          | AGO        | AO
  660  | Anguilla                                     | AIA        | AI
   10  | Antarctica (the territory South of  60  deg S) | ATA        | AQ
   28  | Antigua and Barbuda                          | ATG        | AG
   32  | Argentina, Argentine Republic                | ARG        | AR
( 10  rows)


Создаем вот такую (хотя и не совсем) простую функцию для работы с этой табличкой
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE OR REPLACE FUNCTION sql_in(txt text) RETURNS SETOF RECORD AS
$$
    DECLARE
        rez RECORD;
    BEGIN
        FOR rez IN EXECUTE 'SELECT * FROM Country WHERE short_name =\'' || txt || '\''
        LOOP
            RETURN NEXT rez;
        END LOOP;
        RETURN;
    END;
$$ LANGUAGE 'plpgsql';



А теперь "ломаем" нашу функцию
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
jelis=> select * from sql_in('AFG') as (id integer, name varchar( 8192 ), short_name char( 3 ), shrtest_name char( 2 ));
 id |    name     | short_name | shrtest_name
----+-------------+------------+--------------
   4  | Afghanistan | AFG        | AF
( 1  row)

jelis=> select * from sql_in('AFG\' OR id= \'20') as (id integer, name varchar( 8192 ), short_name char( 3 ), shrtest_name char( 2 ));
 id |           name           | short_name | shrtest_name
----+--------------------------+------------+--------------
   4  | Afghanistan              | AFG        | AF
  20  | Andorra, Principality of | AND        | AD
( 2  rows)


Тут конечно есть много моментов без которых injection невозможет, главный из которых, это, конечно execute. RETURN SETOF RECORD в функции я сделал с мыслю что можно будет получить данные вообще из другой таблицы. Но в EXECUTE может быть только один запрос, и тупо добавить '; SELECT * FROM Passwords ' не возможно... к щастью :-) Но, думаю, есть еще много моментов, который можно "поломать".
Вывод: если на функции возлагаються какието ожидания по безопасности то незабывайте проверять входящие параметры!!!
...
Рейтинг: 0 / 0
Уязвимости, связанные с хранимыми процедурами
    #34303942
postuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Частично решил эту проблему с числовыми параметрами, типизируя их.
Код: plaintext
sprintf(sql,"SELECT p1 FROM t1 WHERE p2=%i",atoi(param));
Но как в этом случае быть с текстовыми полями? Есть ли в Си функции, подобные mysql_escape_string, экранирующие спец. символы типа ";" итд? Думаю, что они не должны быть сложными и самому их написать...
...
Рейтинг: 0 / 0
Уязвимости, связанные с хранимыми процедурами
    #34303964
postuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
PQescapeStringConn
Сейчас попробую с помощью этих функций экранировать символы. Полностью ли это поможет избежать sql-инжекцию?
...
Рейтинг: 0 / 0
Уязвимости, связанные с хранимыми процедурами
    #34304303
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
postuserЧастично решил эту проблему с числовыми параметрами, типизируя их.
Код: plaintext
sprintf(sql,"SELECT p1 FROM t1 WHERE p2=%i",atoi(param));
Но как в этом случае быть с текстовыми полями? Есть ли в Си функции, подобные mysql_escape_string, экранирующие спец. символы типа ";" итд? Думаю, что они не должны быть сложными и самому их написать...

А вы что, ваши "безопасные" ХП еще и на С пишете??? 8-0
...
Рейтинг: 0 / 0
Уязвимости, связанные с хранимыми процедурами
    #34304371
postuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jelis postuserЧастично решил эту проблему с числовыми параметрами, типизируя их.
Код: plaintext
sprintf(sql,"SELECT p1 FROM t1 WHERE p2=%i",atoi(param));
Но как в этом случае быть с текстовыми полями? Есть ли в Си функции, подобные mysql_escape_string, экранирующие спец. символы типа ";" итд? Думаю, что они не должны быть сложными и самому их написать...

А вы что, ваши "безопасные" ХП еще и на С пишете??? 8-0
Нет :). Но функции будут вызываться через cgi-программу на Си, вот в этой cgi-проге и используется Си. Можно было конечно понятнее пример привести (с функцией)
Код: plaintext
sprintf(sql,"SELECT * FROM my_funct(%i)",atoi(param));
...
Рейтинг: 0 / 0
Уязвимости, связанные с хранимыми процедурами
    #34304402
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
postuser Jelis postuserЧастично решил эту проблему с числовыми параметрами, типизируя их.
Код: plaintext
sprintf(sql,"SELECT p1 FROM t1 WHERE p2=%i",atoi(param));
Но как в этом случае быть с текстовыми полями? Есть ли в Си функции, подобные mysql_escape_string, экранирующие спец. символы типа ";" итд? Думаю, что они не должны быть сложными и самому их написать...

А вы что, ваши "безопасные" ХП еще и на С пишете??? 8-0
Нет :). Но функции будут вызываться через cgi-программу на Си, вот в этой cgi-проге и используется Си. Можно было конечно понятнее пример привести (с функцией)
Код: plaintext
sprintf(sql,"SELECT * FROM my_funct(%i)",atoi(param));


Ааа... ну это уже тогда другой разговор (про С) :-) Просто, имхо, если пишем что-то рассчитанное на безопасность, то надо предпологать, что пользователь может просто подключиться напрямую, с помощью, допустим psql, и делать все что его подленькой (в этом случае) душенке угодно :-) В пределах, данных ему прав, конечно. Т.е. cgi у нас и будет "пользователем". Это я конечно не к тому, что на клиенте не надо заботиться о безопасности, а к тому, что если у вас ХП - security definer, то и стоить обратить пристальное внимание на них (ХП)! И проверят именно в хранимках, чего они получают от клиента ( в общем случае хотя бы quote_literal делать).
...
Рейтинг: 0 / 0
Уязвимости, связанные с хранимыми процедурами
    #34307550
postuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понял, от чего спасает
Код: plaintext
1.
char str_from[ 999 ],str_to[ 999 ];
PQescapeString (str_to, str_from, sizeof(str_from));
В str_to получаем строку из str_from с замененными одинарными кавычками на двойные. Как можно эксплуатировать эту уязвимость без смены типа кавычек?
Код: plaintext
sql_in('AFG\' OR id= \'20')
Что мешает в этом примере не использовать \ ? Щас сервера нет под рукой не на чем поэкспериментировать :(.
...
Рейтинг: 0 / 0
Уязвимости, связанные с хранимыми процедурами
    #34307631
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
postuser
Код: plaintext
sql_in('AFG\' OR id= \'20')
Что мешает в этом примере не использовать \ ? Щас сервера нет под рукой не на чем поэкспериментировать :(.
ну можно так вызвать
Код: plaintext
1.
sql_in('AFG'' OR id= ''20')
результат то же. Однако вот такое уже не прокатит (корректно отработает, но ни чего не вернет)
Код: plaintext
1.
sql_in('AFG'''' OR id= ''''20')
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Уязвимости, связанные с хранимыми процедурами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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