Mybatis comprobar la inyección de SQL

declaración Mapper.xml mybatis en la instrucción SQL para pasar parámetros ParameterType dos maneras: $ # {} y {}.

# {} Se utiliza para evitar la inyección de SQL, $ {} se utiliza para los parámetros de empalme dinámicos.


Cómo solucionar problemas de una

1. Compruebe si hay $ No.

Si está utilizando el editor de código ide, pone mundial ${, navegar rápidamente a utilizar $ {} declaraciones SQL en el empalme parámetro externo pasan a encontrar la entrada, sql cerrada de probar.

2. Compruebe si hay orden por la declaración

Del mismo modo, en la búsqueda de la posibilidad de utilizar order byla declaración de clase, si hay paso a paso para realizar un seguimiento de si hay parámetros externos, sin filtrar transmitido directamente a la orden por la declaración en el interior.


¿Por qué # {} en materia de seguridad

# {} En un JDBC precompilado similar, por lo seguro. sentencia SQL similar al siguiente: (principio de JDBC de pre-compilado, esperanza detrás se puede dedicar a la investigación, y el blog de escritura)

  • Utilizar $ {} efecto:
select * from testtable where id="1" or true or id  # 1后面就是被攻击者恶意构造的字符

  • # {} Se utiliza para efecto:
select * from testtable where id="1\" or true or id\""         # 1后面就是被攻击者恶意构造的字符


¿En qué circunstancias se toman # {}

La respuesta es: no en el caso de la orden por la declaración de ordenar, y por qué?

Poner al día orden por el uso

ordenado por una especie de herramienta.

# 这个1就是指第一个列索引,也可以写id (列索引)
select * from testtable ORDER BY 1 ASC #ASC表示按升序排序,DESC表示按降序排序

# 两个代码是一样的
select * from testtable ORDER BY id ASC #ASC表示按升序排序,DESC表示按降序排序


Porque no estamos tomamos por fin # {}, ya que con este se convertirá automáticamente en una cadena, citado de forma automática, los estados no pueden entrar en vigor.

<select id="selectStudentsByName" resultType="Student">
    select id,name,age,score from student order by #{column}
</select>

<!--编译出来的结果如下:-->
select * from table order by 'column'

Usted encontrará que añadir “”el símbolo de comillas dobles, que no es el tipo normal.


¿Cómo resolver:
Uso $ {}, MyBatis no va a modificar o cambiar la cadena de caracteres de escape. Pero esto ni seguro, conduce a posibles ataques de inyección SQL. Así tenemos que se limite, no permita que el usuario introduzca algunos campos ilegales, por lo general sólo la comprobación de modo de lista blanca.


resumen

Incluso si se trata de la tecnología SQL pre-compilador seguro, es también un ámbito, una serie de escenarios no es aplicable. Cuando estamos haciendo cuadro negro o de auditoría, se reunió escena precompilado no puede hacer frente, como la clasificación, cuando se tiene que prestar especial atención, o estar en otro order byinyecta en la tragedia.

Supongo que te gusta

Origin www.cnblogs.com/mysticbinary/p/12613243.html
Recomendado
Clasificación