Все знакомы с инъекцией SQL. Это общий метод атаки. Злоумышленники вводят некоторые странные фрагменты SQL в информацию о форме или URL -адрес интерфейса, такие как «или« 1 »= '1», которые могут вторгаться в приложения с недостаточной проверкой параметров. Таким образом, нам нужно сделать некоторую работу в нашем приложении, чтобы предотвратить такие методы атаки. В некоторых приложениях с высокой безопасностью, таких как банковское программное обеспечение, мы часто используем метод замены всех операторов SQL на сохраненные процедуры для предотвращения инъекции SQL. Это, конечно, очень безопасный способ, но нам может не понадобиться этот жесткий метод в нашем ежедневном развитии.
В качестве полуавтоматической структуры слоя постоянства, структура Mybatis должна быть написана вручную. В это время, конечно, необходимо предотвратить инъекцию SQL. На самом деле, SQL Mybatis - это структура с функцией «Вход + вывод», аналогичная функции, следующим образом:
<select id = "getBlogbyId" resultType = "blog" parameterType = "int"> <br> выберите ID, заголовок, автор, контент из блога, где id =#{id} </select> Здесь ParameterType указывает тип входного параметра, а ResultType указывает тип выходного параметра. В ответ на вышесказанное, если мы хотим предотвратить инъекцию SQL, нам, естественно, приходится усердно работать над параметрами ввода. Выделенная часть в приведенном выше коде - это часть, где входные параметры сплачиваются в SQL. После передачи параметров распечатайте выполненный оператор SQL, и вы увидите, что SQL выглядит так:
Выберите идентификатор, заголовок, автор, контент из блога, где id =?
Независимо от того, какие параметры введены, напечатанный SQL такой. Это потому, что Mybatis обеспечивает функцию предварительного считы. Перед выполнением SQL приведенный выше SQL будет отправлен в базу данных для компиляции. Во время выполнения вы можете использовать скомпилированный SQL напрямую и заменить заполнителя "?". Поскольку инъекция SQL может работать только на процессе компиляции, этот метод может избежать проблемы инъекции SQL.
Как Mybatis достигает предварительной компиляции SQL? Фактически, в нижней части рамки на работе работает класс PrefitStatement в JDBC. Подготовленное предприятие - это подкласс утверждений, с которым мы очень хорошо знакомы. Его объект содержит скомпилированные операторы SQL. Этот подход «готовый» не только улучшает безопасность, но и повышает эффективность при выполнении одного SQL несколько раз, потому что SQL был составлен и не нужно компилировать при выполнении.
Сказав это, можем ли мы предотвратить инъекцию SQL, используя Mybatis? Конечно, нет, см. Следующий код:
<select id = "orderblog" outdetype = "blog" parametertype = "map"> select id, заголовок, автор, контент по заказу блога от $ {orderparam} </select> После тщательного наблюдения формат встроенного параметра изменился с "#{xxx}" до $ {xxx}. Если мы назначаем параметр «orderparam» для «id» и распечатать SQL, он выглядит так:
Выберите идентификатор, заголовок, автор, контент из блога по заказу от ID
Очевидно, это не может предотвратить инъекцию SQL. В Mybatis параметры в формате «$ {XXX}» будут непосредственно участвовать в компиляции SQL, что предотвращает инъекционные атаки. Однако, когда дело доходит до имен динамических таблиц и имен столбцов, мы можем использовать только форматы параметров, такие как «$ {xxx}», поэтому нам нужно вручную обработать такие параметры в коде, чтобы предотвратить инъекцию.
Вывод: при написании операторов отображения Mybatis попробуйте использовать формат «#{xxx}». Если вам нужно использовать параметры, такие как «$ {xxx}», вы должны вручную выполнять хорошую работу по фильтрации, чтобы предотвратить атаки впрыска SQL.
Вышеупомянутое - полное содержание рамки настойчивого уровня Java Mybatis предотвращает инъекцию SQL, которую приносит вам редактор. Я надеюсь, что все будут поддерживать wulin.com больше ~