|
|
|
Процедуры и функции против инъекций 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/search_topic.php?author=%D0%A1%D1%82%D1%80%D0%B0%D0%BD%D0%BD%D0%B8%D1%86%D0%B0&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
152ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 441ms |
| total: | 714ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...