powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / безопасность хранимых процедур MySQL
25 сообщений из 31, страница 1 из 2
безопасность хранимых процедур MySQL
    #38585672
b10s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте,

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

Код: 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
безопасность хранимых процедур MySQL
    #38585678
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
b10sМожет ли злоумышленник изменить логику работы процедуры и провести SQL-инъекцию?Конкретно у данной процедуры, имхо, нет.
...
Рейтинг: 0 / 0
безопасность хранимых процедур MySQL
    #38585685
b10s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо. ждём еще мнения!

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

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



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

Код: 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
безопасность хранимых процедур MySQL
    #38586119
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть ещё варианты для проверки?
...
Рейтинг: 0 / 0
безопасность хранимых процедур MySQL
    #38588021
b10s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, что параметры в хранимых процедурых полностью безопасны.
...
Рейтинг: 0 / 0
безопасность хранимых процедур MySQL
    #38588026
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
b10sПохоже, что параметры в хранимых процедурых полностью безопасны.Вовсе нет. Если задаться целью, можно и с ними SQL-инъекцию словить.
...
Рейтинг: 0 / 0
безопасность хранимых процедур MySQL
    #38588193
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftb10sПохоже, что параметры в хранимых процедурых полностью безопасны.Вовсе нет. Если задаться целью, можно и с ними SQL-инъекцию словить.без выполнения криво написанного prepared statement с использованием параметров? а пример можно?
...
Рейтинг: 0 / 0
безопасность хранимых процедур MySQL
    #38588197
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirmiksoftпропущено...
Вовсе нет. Если задаться целью, можно и с ними SQL-инъекцию словить.без выполнения криво написанного prepared statement с использованием параметров? а пример можно?Почему же "без"? именно с ним :)
...
Рейтинг: 0 / 0
безопасность хранимых процедур MySQL
    #38588649
b10s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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


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

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

но sql строка для prepared statement может быть сформирована из параметров, которые предваритель вычиляются в самой хранимке на основании входных параметров хранимки, тогда защита уже в самой логика хранимки.
...
Рейтинг: 0 / 0
безопасность хранимых процедур MySQL
    #38588827
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
b10sпотихоньку выхожу на смысл сказанного miksoftДа чего тут входить... Если prepared statement собирается конкатенацией с участием входных параметров без должной проверки/экранирования, то может быть все, что угодно.
...
Рейтинг: 0 / 0
безопасность хранимых процедур MySQL
    #38589702
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
безопасность хранимых процедур MySQL
    #38589743
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
безопасность хранимых процедур MySQL
    #38589757
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
безопасность хранимых процедур MySQL
    #38589809
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё описанное не исключает проведения DDoS-атаки. Достаточно нарисовать в качестве критерия отбора подзапрос, обрабатывающий дохреналиард записей из дохреналиона копий таблицы (да ещё залочить их для пущего эффекта) - и сервер сядет курить бамбук.
...
Рейтинг: 0 / 0
безопасность хранимых процедур MySQL
    #38589971
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaВсё описанное не исключает проведения DDoS-атаки. Достаточно нарисовать в качестве критерия отбора подзапрос, обрабатывающий дохреналиард записей из дохреналиона копий таблицы (да ещё залочить их для пущего эффекта) - и сервер сядет курить бамбук.

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

Количество копий - по вкусу.
...
Рейтинг: 0 / 0
безопасность хранимых процедур MySQL
    #38589982
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
такое выводит 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
безопасность хранимых процедур MySQL
    #38589983
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то, что передается в параметре - не выполняется!
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / безопасность хранимых процедур MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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