mybatis inyección SQL resolución de problemas

todos de inyección SQL está familiarizado, es un ataque común, el atacante entró algún fragmento SQL extraña en forma de información o la interacción url, por ejemplo, "o '1' = '1'" esta declaración, es posible invasión insuficientes aplicaciones de comprobación de parámetros. Así que en nuestra necesidad de aplicación para hacer algún trabajo para protegerse contra este tipo de ataques. En algunas aplicaciones de alta seguridad, como la banca de software, a menudo se utiliza para reemplazar todos los procedimientos almacenados SQL en tal una manera de evitar la inyección de SQL, que por supuesto es una forma muy segura, pero generalmente se desarrollan, puede ser esto no requiere de manera rígida.

mybatis marco como el marco de la capa de persistencia de un semi-automatizado, el cual sentencia SQL debe escribir manualmente la nuestra, esta vez, por supuesto, la necesidad de evitar la inyección de SQL. De hecho, tener un sql mybatis la función "+ salida de entrada", similar a la estructura de la función, como sigue:

<select id=“getBlogById“ resultType=“Blog“ parameterType=”int”><br>
       select id,title,author,content from blog where id=#{id}
</select>

Aquí, parameterType designa un tipo de parámetros de entrada, resultType designa los tipos de parámetros de salida. En respuesta a lo anterior, si queremos evitar la inyección de SQL, por supuesto, al trabajo duro en los parámetros de entrada. Los aspectos más destacados sobre el código se introduce en la porción empalmada sql parámetro, después de pasar parámetros, a imprimir los ejecución de instrucciones SQL, verá que esto es SQL:

select id,title,author,content from blog where id = ?

No importa lo que los parámetros de entrada, a imprimir los SQL son como este. Esto se debe a mybatis función de pre-compilados está activado, antes de la ejecución de SQL, primero envía la base de datos SQL anterior para ser compilado, ejecutado, compilado directamente SQL, reemplace el marcador de posición "?" En él. Debido a la inyección de SQL sólo se puede construir funciona el proceso, por lo que esta es muy buena manera de evitar el problema de la inyección de SQL.

¿Cómo mybatis SQL que se precompila? De hecho, en la parte inferior del marco, es la clase PreparedStatement JDBC en el trabajo, estamos muy familiarizados con la Declaración PreparedStatement subclase, su objeto contiene precompila instrucción SQL. Este enfoque de "listo" no sólo mejorará la seguridad, sino también en la ejecución de un SQL varias veces, puede mejorar la eficiencia, ya que SQL ya compilado, ya no hay necesidad de re-ejecución en tiempo de compilación.

De todos modos, si seremos capaces de utilizar mybatis impedirá que la inyección de SQL? Por supuesto que no, véase el siguiente código:

<select id=“orderBlog“ resultType=“Blog“ parameterType=map>

       select id,title,author,content from blog order by ${orderParam}

</select>

La observación cuidadosa, parámetro de formato en línea con "# {xxx}" se convierte en un $ {} xxx. Si damos el parámetro "orderParam" asignado "id", imprima el sql, así:

SELECT ID, título, autor, el contenido de la orden del blog de Identificación

Obviamente, esto no se puede evitar la inyección de SQL. En mybatis, el " X X X " Este tipo de formato tipo del parámetro número posible directamente de acceso parámetros y SQl ed traducción , a partir y no ser capaz de evitar evitar la inyección en el ataque de golpe . Sin embargo involucrados y la dinámica de estado de la tabla nombres y columnas nombres cuando , sólo se podrá hacer uso " {} "Xxx formato tales parámetros, por lo que este tipo de parámetros que necesitan el procesamiento de código de forma manual para prevenir la implantación.

Conclusión: En la preparación de la declaración mybatis asignada, en la medida de lo posible, tales formato "# {xxx}". Si se ve obligado a utilizar "$ {} xxx" tales parámetros, para hacer el trabajo de filtrado de forma manual para evitar ataques de inyección SQL.

Publicado 77 artículos originales · ganado elogios 39 · Vistas a 80000 +

Supongo que te gusta

Origin blog.csdn.net/qq_33824312/article/details/76263755
Recomendado
Clasificación