|
Процедуры и функции против инъекций MySQL
|
|||
---|---|---|---|
#18+
Добрый день! Переделываю код, хочу чтобы БД была устойчива к инъекциям. Для тестов создал копию стандартной БД world с таблицей city, которая содержит названия городов, код страны и т.д. Беру пример неправильно составленной процедуры и примера инъекции из учебника (адаптировал запрос под свою БД, данная процедура получает на входе буквенный код страны, а затем выдает кол-во городов этой страны из БД): Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Пример добросовестного использования: Код: plsql 1.
Пример инъекции: Код: plsql 1.
Т.е что происходит, автор создает в теле процедуры строку с запросом, которую потом использует как запрос... Потом героически пытается справиться с ситуацией, справляется, но так и не избавляется от формирования запроса в строке... Вопрос, почему нельзя написать процедуру сразу так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Зачем мне нужно формировать запрос в строке, если я могу его сразу сформировать в теле процедуры? Разве не в этом их фишка? И насколько я понял, такая процедура устойчива к инъекциям, сколько бы кавычек и попыток что-либо отправить в i1 не было - она всегда остается переменной. Или я не прав, и такая запись процедуры тоже уязвима? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2021, 16:33 |
|
Процедуры и функции против инъекций MySQL
|
|||
---|---|---|---|
#18+
volosoed, существует вариант с параметрами https://dev.mysql.com/doc/refman/8.0/en/sql-prepared-statements.html это раз зачем юзеру давать структуру и поля таблиц? это два. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2021, 18:14 |
|
Процедуры и функции против инъекций MySQL
|
|||
---|---|---|---|
#18+
volosoed Зачем мне нужно формировать запрос в строке, если я могу его сразу сформировать в теле процедуры? Разве не в этом их фишка? первая продемонстрированная глупость char(200) в то время как длина параметра может быть не более 3 символов вторая продемонстрированная глупость where countryCode выборка по полю char. вместо int. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2021, 18:17 |
|
Процедуры и функции против инъекций MySQL
|
|||
---|---|---|---|
#18+
вадя, Спасибо, вариант с параметрами будет выглядеть так: Код: sql 1. 2. 3.
У меня вопрос, как передать в строку запроса более одного параметра? Это вообще возможно? вадязачем юзеру давать структуру и поля таблиц? Вот тут немного не понял, каким образом структура и поля таблиц становятся открытыми, если записать Код: sql 1.
а не в строке запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2021, 11:41 |
|
Процедуры и функции против инъекций MySQL
|
|||
---|---|---|---|
#18+
volosoed У меня вопрос, как передать в строку запроса более одного параметра? Это вообще возможно? https://dev.mysql.com/doc/refman/8.0/en/execute.html Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2021, 11:50 |
|
Процедуры и функции против инъекций MySQL
|
|||
---|---|---|---|
#18+
Понял, вот пример добавления двух разных кодов: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Но я так и не понял преимуществ построения запроса в строке =) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2021, 12:45 |
|
Процедуры и функции против инъекций MySQL
|
|||
---|---|---|---|
#18+
volosoed я так и не понял преимуществ построения запроса в строке Попробуй без этого построить сводный запрос (pivot) с динамическим набором значений... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2021, 13:01 |
|
Процедуры и функции против инъекций MySQL
|
|||
---|---|---|---|
#18+
volosoed Но я так и не понял преимуществ построения запроса в строке =) какой вариант использовать - дело программиста - его опыта. в примере вариант чисто для демонстрации. использовать его как образец для подражания нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2021, 16:40 |
|
|
start [/forum/topic.php?fid=47&msg=40098898&tid=1827944]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
159ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 257ms |
0 / 0 |