SQL Threat Protection

Este interceptor tiene la función de bloquear ataques de inyección SQL (SQL Injection) en la llamada a una API que accede a una base de datos.

Inyección SQL es un ataque en el que se insertan sentencias SQL engañosas y maliciosas dentro de una consulta (query) desde el cliente al servidor. Así, se puede hacer desde operaciones de administración de la base de datos afectada (como cambio de administrador y configuración de acceso) hasta el manejo inadecuado de su contenido (como cambiar o eliminar datos y exponer información confidencial).

Cómo funciona

El interceptor funciona en base a una expresión regular (regex) que valida el contenido de body, headers, cookies, query params y path params pasados en la petición. Si la regex encuentra fragmentos que puedan indicar una inyección SQL, la llamada se aborta y se devuelve un error (ver posibles errores más abajo).

Para reforzar la seguridad, hemos hecho la regex más restrictiva a partir de la versión 4.4.0.0 de la Plataforma. Si antes utilizaba SQL Threat Protection en sus APIs, es posible que experimente problemas de tráfico de algunos datos que antes no tenían restricciones.

Por ejemplo, si se envía una cadena que contiene una palabra clave y un complemento, el interceptor identifica una amenaza y aborta la petición. En este caso, puede cambiar la forma en que viajan los datos dividiendo la cadena en diferentes pares clave-valor.

Preste atención al envío de imágenes en form-data. En estos casos, el cuerpo se recibe como un array de bytes y, al descodificar, es posible que algunos caracteres se entiendan como inyección SQL y se aborte la llamada. Para evitarlo, puede enviar la imagen convertida a Base64, como en este cuerpo de ejemplo:

{
  "image": {
    "name": "image.jpeg",
    "content-type": "//content base64 encoded",
    "file": "base64string"
  }
}

Configuración

Aunque el interceptor SQL Threat Protection también se puede insertar en el flujo de respuesta (response) de una API, es esencial que esté en el flujo de petición (request), ya que los ataques mencionados ocurren en la dirección del cliente → servidor.

sql threat flow

Para configurar el interceptor, simplemente elija al menos una de las opciones de bloque para proteger.

Cuando se introduce en el flujo de petición, las opciones son las siguientes:

  • Body: aplica protección al cuerpo de la petición;

    • Ignore body when the key is 'Content/type' and the value is 'multipart/form-data': ignora el body si el Content/type tiene el valor multipart/form-data, pudiendo así ignorar posibles expresiones reservadas por el SQL que estén contenidas en archivos enviados de esta forma.

  • Headers: aplica protección a todos los headers, comprobando cada una por separado.

  • Query Params: comprueba cada parámetro buscando un ataque.

  • Cookies: aplica protección a todas las cookies, comprobando cada una de ellas por separado.

  • Path Params: comprueba cada parámetro buscando un ataque.

Cuando se inserta en el flujo de respuesta, hay dos opciones:

  • Body: aplica protección al cuerpo de la respuesta.

    • Ignore body when the key is 'Content/type' and the value is 'multipart/form-data': ignora el body si el Content/type tiene el valor multipart/form-data, pudiendo así ignorar posibles expresiones reservadas por el SQL que estén contenidas en archivos enviados de esta forma.

  • Headers: aplica protección a todos los headers, comprobando cada una por separado.

Si se seleccionan todas las opciones, las validaciones se harán en la siguiente secuencia:

  • Petición: Query Params → Body → Cookies → Headers → Path Params

  • Respuesta: Body→ Headers

sql threat

Los flujos de petición y respuesta permiten expresiones para ser ignoradas por el interceptor, esto evita que la llamada se interrumpa cuando hay palabras o caracteres reservados, pero dentro de un contexto seguro. Para agregar una expresión, escríbala en el campo String y haga clic en ADD, será ignorada en todos los bloques elegidos anteriormente, tenga en cuenta que es case-sensitive por lo que distingue entre mayúsculas y minúsculas.

Cada expresión agregada aumenta el tiempo de procesamiento y, así, la latencia de la solicitud, especialmente si se está validando más de un bloque.

Sugerimos tener cuidado con las expresiones que se agregan, especialmente si coloca algo muy amplio, ya que puede dejar de validar una palabra reservada del SQL.

Errores

Si se identifica algún ataque de inyección, se devuelven los siguientes errores:

Campos Error Cód. HTTP Request Cód. HTTP Response

Body

SQL Injection attack identified in this API Body

400

500

Headers

SQL Injection attack identified in this API Headers

400

500

Query Params

SQL Injection attack identified in this API Query Params

400

-

Cookies

SQL Injection attack identified in this API Cookies

400

-

Path Params

SQL Injection attack identified in this API Path Params

400

-

Thanks for your feedback!
EDIT

Share your suggestions with us!
Click here and then [+ Submit idea]