#mybatis
#мой батис #mybatis
Вопрос:
Я пытаюсь выполнить инструкцию sql, получая динамическую таблицу.
Если используется #{}, sql не работает, потому что он вводится в форме ‘имя_слоя’.
Поэтому я должен использовать $ {}, но есть проблема, которая уязвима для внедрения sql.
<select id="test" parameterType="map" resultType="map">
select
*
from
${table_name}
</select>
Я хочу использовать процедуру для решения этой проблемы, но возвращаемый тип неоднозначен, потому что я должен сделать «выбрать все».
Любые идеи будут оценены по достоинству.
Комментарии:
1.
${table_name}
нормально, если вы полностью контролируете значениеtable_name
из своего приложения. Если она поступает из внешнего мира или вводится пользователем, то это недопустимо. Каков ваш вариант использования?2. В моем случае вводится пользовательский ввод, и имя таблицы выводится с использованием этого ввода, а затем выполняется запрос.
3. @Если это предполагается , это может быть безопасно. Например, пользователь вводит
1
или2
, а затем вы вводите имя таблицыemployee
илиvehicle
, это безопасно. Теперь, если пользователь вводитemployee
илиvehicle
, а затем вы напрямую используете эту строку в инструкции SQL, которая производит SQL-инъекцию. Ключевым в том, что вы сказали, является слово выведенный .