Могут ли ограничивающие условия OR в вашем SQL исправить уязвимость SQL-инъекций? - PullRequest
0 голосов
/ 04 декабря 2018

Наш веб-сайт был объявлен уязвимым для внедрения SQL-кода, и разработчик, который исправил эту уязвимость, говорил, что он должен ограничить предложения OR в критериях поиска.

Раньше пользователи использовали для поиска примерно 500 заказов, что сейчас ограничено.Как он говорит в соответствии с практикой внедрения SQL, вы должны ограничить условия OR в вашем SQL.

Например, следующий журнал показывает те условия ИЛИ, которые согласно его требованию ограничены.

Это нормально?и его утверждение верно?

Редактировать : База данных Oracle 11.2.

Условия:

and (UPPER(online_order_id) LIKE :param_online_order_id0
or UPPER(online_order_id) LIKE :param_online_order_id1
or UPPER(online_order_id) LIKE :param_online_order_id2
or UPPER(online_order_id) LIKE :param_online_order_id3
or UPPER(online_order_id) LIKE :param_online_order_id4
or UPPER(online_order_id) LIKE :param_online_order_id5 
or UPPER(online_order_id) LIKE :param_online_order_id6 
or UPPER(online_order_id) LIKE :param_online_order_id7
or UPPER(online_order_id) LIKE :param_online_order_id8
or UPPER(online_order_id) LIKE :param_online_order_id9 
or UPPER(online_order_id) LIKE :param_online_order_id10
or UPPER(online_order_id) LIKE :param_online_order_id11
or UPPER(online_order_id) LIKE :param_online_order_id12
or UPPER(online_order_id) LIKE :param_online_order_id13
or UPPER(online_order_id) LIKE :param_online_order_id14
or UPPER(online_order_id) LIKE :param_online_order_id15
or UPPER(online_order_id) LIKE :param_online_order_id16
or UPPER(online_order_id) LIKE :param_online_order_id17
or UPPER(online_order_id) LIKE :param_online_order_id18
or UPPER(online_order_id) LIKE :param_online_order_id19
or UPPER(online_order_id) LIKE :param_online_order_id20
or UPPER(online_order_id) LIKE :param_online_order_id21
or UPPER(online_order_id) LIKE :param_online_order_id22
or UPPER(online_order_id) LIKE :param_online_order_id23
or UPPER(online_order_id) LIKE :param_online_order_id24
or UPPER(online_order_id) LIKE :param_online_order_id25
or UPPER(online_order_id) LIKE :param_online_order_id26
or UPPER(online_order_id) LIKE :param_online_order_id27
or UPPER(online_order_id) LIKE :param_online_order_id28
or UPPER(online_order_id) LIKE :param_online_order_id29
or UPPER(online_order_id) LIKE :param_online_order_id30
or UPPER(online_order_id) LIKE :param_online_order_id31
or UPPER(online_order_id) LIKE :param_online_order_id32
or UPPER(online_order_id) LIKE :param_online_order_id33
or UPPER(online_order_id) LIKE :param_online_order_id34
or UPPER(online_order_id) LIKE :param_online_order_id35
or UPPER(online_order_id) LIKE :param_online_order_id36
or UPPER(online_order_id) LIKE :param_online_order_id37
or UPPER(online_order_id) LIKE :param_online_order_id38
or UPPER(online_order_id) LIKE :param_online_order_id39
or UPPER(online_order_id) LIKE :param_online_order_id40
or UPPER(online_order_id) LIKE :param_online_order_id41
or UPPER(online_order_id) LIKE :param_online_order_id42
or UPPER(online_order_id) LIKE :param_online_order_id43
or UPPER(online_order_id) LIKE :param_online_order_id44
or UPPER(online_order_id) LIKE :param_online_order_id45
or UPPER(online_order_id) LIKE :param_online_order_id46
or UPPER(online_order_id) LIKE :param_online_order_id47
or UPPER(online_order_id) LIKE :param_online_order_id48
or UPPER(online_order_id) LIKE :param_online_order_id49
or UPPER(online_order_id) LIKE :param_online_order_id50
or UPPER(online_order_id) LIKE :param_online_order_id51
or UPPER(online_order_id) LIKE :param_online_order_id52
or UPPER(online_order_id) LIKE :param_online_order_id53
or UPPER(online_order_id) LIKE :param_online_order_id54
or UPPER(online_order_id) LIKE :param_online_order_id55
or UPPER(online_order_id) LIKE :param_online_order_id56
or UPPER(online_order_id) LIKE :param_online_order_id57
or UPPER(online_order_id) LIKE :param_online_order_id58
or UPPER(online_order_id) LIKE :param_online_order_id59
or UPPER(online_order_id) LIKE :param_online_order_id60
or UPPER(online_order_id) LIKE :param_online_order_id61
or UPPER(online_order_id) LIKE :param_online_order_id62
or UPPER(online_order_id) LIKE :param_online_order_id63
or UPPER(online_order_id) LIKE :param_online_order_id64
or UPPER(online_order_id) LIKE :param_online_order_id65
or UPPER(online_order_id) LIKE :param_online_order_id66
or UPPER(online_order_id) LIKE :param_online_order_id67
or UPPER(online_order_id) LIKE :param_online_order_id68
or UPPER(online_order_id) LIKE :param_online_order_id69
or UPPER(online_order_id) LIKE :param_online_order_id70
or UPPER(online_order_id) LIKE :param_online_order_id71)

1 Ответ

0 голосов
/ 07 декабря 2018

Обычно SQL-инъекции встречаются в коде, выполняющем функцию такого типа, потому что код объединяет предложение in, образованное объединением значений (часто без проверки).

Как отметили в комментариях несколько человек, вероятно, ваш разработчик исправил инъекцию SQL, но сделал это таким образом, что это может вызвать проблемы с производительностью и другие ограничения.Разработчик правильно следует общим рекомендациям по использованию параметризованных запросов (переменных связывания), но слепо следует этим рекомендациям в этом случае не очень хорошо.

Лучший способ исправить это (как упоминает Damien_The_Unbeliever) - привязать эток типу массива на стороне БД Oracle - для этого требуется только одно связывание, и вы получите лучшую производительность.Это требует добавления объекта на стороне БД, поэтому его сложнее реализовать.

Другой вариант - продолжать использовать предложение in, но обеспечить код, проверяющий значения по мере их объединения в -в случае идентификатора заказа вполне вероятно, что вы можете просто проверить, что это целое число.Это не будет работать так же хорошо, как первый вариант, но будет обрабатывать большее количество заказов более изящно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...