Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / безопасность хранимых процедур MySQL / 25 сообщений из 31, страница 1 из 2
13.03.2014, 20:11:48
    #38585672
b10s
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
Здравствуйте,

представим что у нас есть код:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DELIMITER $$

CREATE PROCEDURE `someProc`( IN _xxx VARCHAR(50) )
BEGIN 
   
    SELECT _xxx AS ttt;
        
END$$

DELIMITER ;



затем я его вызываю, например, так:

Код: sql
1.
call someProc("ololol")



Вопрос : насколько безопасен код определения процедуры? Может ли злоумышленник изменить логику работы процедуры и провести SQL-инъекцию?
...
Рейтинг: 0 / 0
13.03.2014, 20:17:22
    #38585678
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
b10sМожет ли злоумышленник изменить логику работы процедуры и провести SQL-инъекцию?Конкретно у данной процедуры, имхо, нет.
...
Рейтинг: 0 / 0
13.03.2014, 20:23:03
    #38585685
b10s
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
спасибо. ждём еще мнения!

miksoft , а если в коде процедуры написать так:

Код: sql
1.
SELECT * FROM someTable WHERE someField=_xxx ;



ничего не поменяется?
...
Рейтинг: 0 / 0
13.03.2014, 21:56:59
    #38585719
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
проверил

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE table2 (
  id int(11) NOT NULL AUTO_INCREMENT,
  x varchar(255) DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE = INNODB
AUTO_INCREMENT = 3
AVG_ROW_LENGTH = 8192
CHARACTER SET utf8
COLLATE utf8_general_ci;


Код: sql
1.
2.
3.
4.
PROCEDURE procedure2(IN Param1 VARCHAR(255))
BEGIN
SELECT * FROM table2 t WHERE id=Param1;
END


в качестве параметра ввел
1; DROP TABLE IF EXISTS TABLE2 CASCADE;
выполнено только то что до первого ;
...
Рейтинг: 0 / 0
14.03.2014, 12:19:32
    #38586119
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
есть ещё варианты для проверки?
...
Рейтинг: 0 / 0
17.03.2014, 12:21:33
    #38588021
b10s
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
Похоже, что параметры в хранимых процедурых полностью безопасны.
...
Рейтинг: 0 / 0
17.03.2014, 12:25:30
    #38588026
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
b10sПохоже, что параметры в хранимых процедурых полностью безопасны.Вовсе нет. Если задаться целью, можно и с ними SQL-инъекцию словить.
...
Рейтинг: 0 / 0
17.03.2014, 13:57:38
    #38588193
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
miksoftb10sПохоже, что параметры в хранимых процедурых полностью безопасны.Вовсе нет. Если задаться целью, можно и с ними SQL-инъекцию словить.без выполнения криво написанного prepared statement с использованием параметров? а пример можно?
...
Рейтинг: 0 / 0
17.03.2014, 13:58:28
    #38588197
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
tanglirmiksoftпропущено...
Вовсе нет. Если задаться целью, можно и с ними SQL-инъекцию словить.без выполнения криво написанного prepared statement с использованием параметров? а пример можно?Почему же "без"? именно с ним :)
...
Рейтинг: 0 / 0
17.03.2014, 19:15:32
    #38588649
b10s
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
miksoft,

ждём демонстрации :)
...
Рейтинг: 0 / 0
17.03.2014, 19:54:49
    #38588692
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
b10sПохоже, что параметры в хранимых процедурых полностью безопасны.

А с чего ты решил, что они небезопасны ?

Небезопасно только, когда ты делаешь dynexec из переменных, неважно, каких -- параметров или простых.
Без DYNEXEC всё безопасно на 100%, переменные никогда не воспринимаются как части комманды SQL-я.
...
Рейтинг: 0 / 0
17.03.2014, 20:39:18
    #38588745
b10s
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
MasterZivА с чего ты решил, что они небезопасны ?


Решил исходя из наших обсуждений выше.


MasterZivБез DYNEXEC всё безопасно на 100%, переменные никогда не воспринимаются как части комманды SQL-я.

А никто тут DYNEXEC и не использует. Я даже не знаю что это такое :D

А вообще. прочти еще раз

MasterZivНебезопасно только, когда ты делаешь dynexec из переменных, неважно, каких -- параметров или простых.
Без DYNEXEC всё безопасно на 100%, переменные никогда не воспринимаются как части комманды SQL-я.

Я не пойму что ты имеешь ввиду. Безопасны они или не безопасны? С DYNEXEC или без DYNEXEC ?

p.s.: опять флудильня начинается ;(
...
Рейтинг: 0 / 0
17.03.2014, 20:45:30
    #38588749
b10s
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
b10s,

всё. понял. мой косяк. к концу рабочего дня голова не варит.

сейчас изучу что есть DYNEXEC и подумаю еще раз над сказанным :)
...
Рейтинг: 0 / 0
17.03.2014, 20:47:35
    #38588750
b10s
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
b10s,

потихоньку выхожу на смысл сказанного miksoft и MasterZiv.

резюмирую: если не использовать prepared statement, то параметры хранимых процедур можно считать полностью безопасными. Верно?
...
Рейтинг: 0 / 0
17.03.2014, 20:50:38
    #38588751
b10s
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
b10s,

upd: и если не пользоваться динамическим sql, где эта переменная используется.

кажется, ничего не упустил.
...
Рейтинг: 0 / 0
17.03.2014, 22:12:02
    #38588816
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
авторрезюмирую: если не использовать prepared statement, то параметры хранимых процедур можно считать полностью безопасными. Верно?


поправлю
безопасно, если использовать prepared statement с подстановкой где для передачи параметров используются ?

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

но sql строка для prepared statement может быть сформирована из параметров, которые предваритель вычиляются в самой хранимке на основании входных параметров хранимки, тогда защита уже в самой логика хранимки.
...
Рейтинг: 0 / 0
17.03.2014, 22:22:54
    #38588827
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
b10sпотихоньку выхожу на смысл сказанного miksoftДа чего тут входить... Если prepared statement собирается конкатенацией с участием входных параметров без должной проверки/экранирования, то может быть все, что угодно.
...
Рейтинг: 0 / 0
18.03.2014, 16:28:21
    #38589702
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
вадяпроверил

Код: sql
1.
2.
3.
4.
PROCEDURE procedure2(IN Param1 VARCHAR(255))
BEGIN
SELECT * FROM table2 t WHERE id=Param1;
END


в качестве параметра ввел
1; DROP TABLE IF EXISTS TABLE2 CASCADE;
выполнено только то что до первого ;
Что, оно в натуре вернуло запись с id = 1???
...
Рейтинг: 0 / 0
18.03.2014, 16:57:25
    #38589743
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
Dimitry Sibiryakovвадяпроверил

Код: sql
1.
2.
3.
4.
PROCEDURE procedure2(IN Param1 VARCHAR(255))
BEGIN
SELECT * FROM table2 t WHERE id=Param1;
END



в качестве параметра ввел
1; DROP TABLE IF EXISTS TABLE2 CASCADE;
выполнено только то что до первого ;
Что, оно в натуре вернуло запись с id = 1??? Ну да, а почему бы и нет?
...
Рейтинг: 0 / 0
18.03.2014, 17:04:17
    #38589757
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
Dimitry Sibiryakovвадяпроверил

Код: sql
1.
2.
3.
4.
PROCEDURE procedure2(IN Param1 VARCHAR(255))
BEGIN
SELECT * FROM table2 t WHERE id=Param1;
END


в качестве параметра ввел
1; DROP TABLE IF EXISTS TABLE2 CASCADE;
выполнено только то что до первого ;
Что, оно в натуре вернуло запись с id = 1???
В НАТУРЕ!!!
проверь сам.
...
Рейтинг: 0 / 0
18.03.2014, 17:38:15
    #38589809
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
Всё описанное не исключает проведения DDoS-атаки. Достаточно нарисовать в качестве критерия отбора подзапрос, обрабатывающий дохреналиард записей из дохреналиона копий таблицы (да ещё залочить их для пущего эффекта) - и сервер сядет курить бамбук.
...
Рейтинг: 0 / 0
18.03.2014, 21:17:32
    #38589971
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
AkinaВсё описанное не исключает проведения DDoS-атаки. Достаточно нарисовать в качестве критерия отбора подзапрос, обрабатывающий дохреналиард записей из дохреналиона копий таблицы (да ещё залочить их для пущего эффекта) - и сервер сядет курить бамбук.

приведи пример кода, проверю
...
Рейтинг: 0 / 0
18.03.2014, 21:38:09
    #38589976
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
param1 = '(select count(distinct t1.id+1,t2.id+1,...,t100+1) from table2 t1, table2 t2, ..., table2 t100)'

Количество копий - по вкусу.
...
Рейтинг: 0 / 0
18.03.2014, 21:53:17
    #38589982
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
такое выводит 1 запись
Код: sql
1.
2.
3.
4.
PROCEDURE zzz(IN Param1 VARCHAR(255))
BEGIN
SELECT * FROM zz WHERE id=(SELECT 1);
END



такое
Код: sql
1.
2.
3.
4.
PROCEDURE android.zzz(IN Param1 VARCHAR(255))
BEGIN
SELECT * FROM zz WHERE id=Param1;
END



при
Param1 = (SELECT 1)
не выводит ничего
...
Рейтинг: 0 / 0
18.03.2014, 21:57:29
    #38589983
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
безопасность хранимых процедур MySQL
то, что передается в параметре - не выполняется!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / безопасность хранимых процедур MySQL / 25 сообщений из 31, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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