Ваша функция уязвима для SQL-инъекций.
Подумайте, выполняет ли кто-нибудь эту вставку:
INSERT INTO MST_SEQUENCE_DETAIL (
BRANCHCODE,
KEYCODE,
YEAR,
KEYSEQ
) VALUES (
1,
1,
TO_CHAR( SYSDATE, 'RRRR' ),
'(SELECT psswd FROM usr),keyseq'
);
Затем вызов вашей функции:
GET_SEQUENCE( 1, 1 );
Устанавливаетзапрос к:
V_SQL := 'SELECT (SELECT psswd FROM usr),keyseq.NEXTVAL FROM DUAL';
Следующий оператор:
EXECUTE IMMEDIATE V_SQL BULK COLLECT INTO V_HASIL;
Не удастся, но как не удастся сказать, может ли:
Есть таблица usr
;если нет, тогда вы получите исключение ( SQLFiddle ):
ORA-00942: table or view does not exist ORA-06512: at "USER_4_C4D95A.GET_SEQUENCE", line 18
У него есть столбец с именем psswd
;если нет, вы получите исключение ( SQLFiddle )
ORA-00904: "PSSWD": invalid identifier ORA-06512: at "USER_4_9B4C87.GET_SEQUENCE", line 18
Повторяя это, вы можете начать отображать структуру базы данных и посмотретьдля других уязвимостей, которые могут позволить большие эксплойты.