Предотвратить внедрение sql в oracle "упорядочить по" части - программирование
Подтвердить что ты не робот

Предотвратить внедрение sql в oracle "упорядочить по" части

Чтобы получить некоторые данные, я создаю sql-запрос:)
Конечно, есть некоторые части для фильтрации и заказа.

Чтобы получить результат, я использую "NamedParameterJdbcTemplate", и когда мне нужно что-то добавить в "where", я использую карту параметров, чтобы предотвратить инъекцию.

Но это отличается от части "order by", так как нет автоматического выхода (и это часть sql). Эта часть заказа иногда заполняется данными от пользователя (напрямую), иногда добавляются некоторые дополнительные параметры сортировки из внутреннего кода. Есть одна проблема: иногда это поле сортировки содержит не только имя столбца, но и оператор sql.

Теперь каждый параметр для сортировки экранируется вручную, заменяя некоторые символы (например, ') на пустую строку, но некоторые параметры, которые мы установили для нашего кода, являются немного сложными для передачи этого правила.

Каков наилучший способ предотвратить инъекции sql в сортировке части запроса, когда вы используете шаблон jdbc?

4b9b3361

Ответ 1

Чтобы защитить от SQL-инъекции на стороне базы данных, посмотрите на встроенный пакет Oracle DBMS_ASSERT: http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_assert.htm

Вы можете обнаружить, что функция SIMPLE_SQL_NAME поможет защитить от SQL Injection для вашего предложения ORDER BY.

Надеюсь, что это поможет...

Ответ 2

Вы можете ограничить выбор порядка сортировки. Большинство приложений разрешают пользователям сортировать по отображаемому столбцу, пользователь может выбрать, какой столбец будет сортироваться по месту его столбца.

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

Целые элементы легко проверить, и это не приведет к раскрытию имен базового столбца для пользователя.

Ответ 3

Один из способов, который я использовал, хотя и по разным причинам, заключался в том, чтобы использовать Порядок по 3,2 (третий столбец, второй столбец)

Итак, если вы можете определить имя столбца, введенное положением пользователя в столбцах вывода, косвенность должна убить вектор инъекции.