Política JSONThreatProtection

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

Qué

Minimiza el riesgo que presentan los ataques a nivel de contenido, ya que te permite especificar límites en varias estructuras JSON, como arreglos y strings.

Video: Mira un video breve para obtener más información sobre cómo la política JSONThreatProtection te permite proteger las API contra ataques a nivel de contenido.

Video: Mira este video breve sobre la plataforma de API entre nubes de Apigee.

Referencia de elementos

En la referencia del elemento, se describen los elementos y atributos de la política JSONThreatProtection.

<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
   <DisplayName>JSONThreatProtection 1</DisplayName>
   <ArrayElementCount>20</ArrayElementCount>
   <ContainerDepth>10</ContainerDepth>
   <ObjectEntryCount>15</ObjectEntryCount>
   <ObjectEntryNameLength>50</ObjectEntryNameLength>
   <Source>request</Source>
   <StringValueLength>500</StringValueLength>
</JSONThreatProtection>

Atributos <JSONThreatProtection>

<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1"> 

En la siguiente tabla, se describen los atributos que son comunes a todos los elementos principales de las políticas:

Atributo Descripción Predeterminada Presencia
name

El nombre interno de la política. El valor del atributo name puede contener letras, números, espacios, guiones, guiones bajos y puntos. Este valor no puede superar los 255 caracteres.

De forma opcional, usa el elemento <DisplayName> para etiquetar la política en el editor de proxy de la IU de administración con un nombre de lenguaje natural diferente.

No disponible Obligatorias
continueOnError

Configúralo como false para mostrar un error cuando una política falla. Este es el comportamiento previsto para la mayoría de las políticas.

Configúralo como true para continuar con la ejecución del flujo incluso después de que una política falle.

false Opcional
enabled

Configúralo como true para aplicar la política.

Configúralo como false para desactivar la política. La política no se aplicará incluso si permanece adjunta a un flujo.

true Opcional
async

Este atributo dejó de estar disponible.

false Funciones obsoletas

Elemento <DisplayName>

Se usan además del atributo name para etiquetar la política en el editor de proxy de la IU de administración con un nombre de lenguaje natural diferente.

<DisplayName>Policy Display Name</DisplayName>
Predeterminada

No disponible

Si omites este elemento, se usa el valor del atributo name de la política.

Presencia Opcional
Tipo Cadena

Elemento <ArrayElementCount>

Especifica la cantidad máxima de elementos permitidos en un arreglo.

<ArrayElementCount>20</ArrayElementCount>
Predeterminado: Si no especificas este elemento o si especificas un número entero negativo, el sistema no aplica un límite.
Presencia: Opcional
Tipo: Número entero

Elemento <ContainerDepth>

Especifica la profundidad de contención máxima permitida, en la que los contenedores son objetos o arreglos. Por ejemplo, un arreglo que contiene un objeto que tiene un objeto daría como resultado una profundidad de contención de 3.

<ContainerDepth>10</ContainerDepth>
Predeterminado: Si no especificas este elemento o si especificas un número entero negativo, el sistema no aplica ningún límite.
Presencia: Opcional
Tipo: Número entero

Elemento <ObjectEntryCount>

Especifica la cantidad máxima de entradas permitidas en un objeto.

<ObjectEntryCount>15</ObjectEntryCount>
Predeterminado: Si no especificas este elemento o si especificas un número entero negativo, el sistema no aplica ningún límite.
Presencia: Opcional
Tipo: Número entero

Elemento <ObjectEntryNameLength>

Especifica la longitud máxima de string permitida para un nombre de propiedad dentro de un objeto.

<ObjectEntryNameLength>50</ObjectEntryNameLength>
Predeterminado: Si no especificas este elemento o si especificas un número entero negativo, el sistema no aplica un límite.
Presencia: Opcional
Tipo: Entero

Elemento <Source>

Mensaje que se validará para los ataques de carga útil de JASON. Normalmente, este se configura como request, ya que, por lo general, deberás validar las solicitudes entrantes de las apps cliente. Cuando se configura como message, este elemento evaluará de manera automática el mensaje de solicitud cuando se adjunta al flujo de solicitudes y el mensaje de respuesta cuando se adjunta al flujo de respuesta.

<Source>request</Source>
Predeterminado: solicitud
Presencia: Opcional
Tipo:

String.

Valores válidos: solicitud, respuesta o mensaje.

Elemento <StringValueLength>

Especifica la longitud máxima permitida para un valor de string.

<StringValueLength>500</StringValueLength>
Predeterminado: Si no especificas este elemento o si especificas un número entero negativo, el sistema no aplica un límite.
Presencia: Opcional
Tipo: Número entero

Referencia de errores

En esta sección, se describen los códigos y mensajes de error que se muestran y las variables de fallas que establece Edge cuando esta política activa un error. Esta información es importante para saber si estás desarrollando reglas de fallas con el propósito de manejar fallas. Para obtener más información, consulta Qué debes saber sobre los errores de políticas y Cómo solucionar fallas.

Errores de entorno de ejecución

Estos errores pueden producirse cuando se ejecuta la política.

Código de falla Estado de HTTP Causa Corregir
steps.jsonthreatprotection.ExecutionFailed 500 La política JSONThreatProtection puede arrojar varios tipos de errores ExecutionFailed. La mayoría de estos errores se generan cuando se supera un límite específico establecido en la política. Estos tipos de errores incluyen: longitud del nombre de la entrada del objeto, recuento de entradas de objetos, recuento de elementos del array, profundidad del contenedor y longitud del valor de la string de la string. Este error también ocurre cuando la carga útil contiene un objeto JSON no válido.
steps.jsonthreatprotection.SourceUnavailable 500 Este error se produce si la variable message especificada en el elemento <Source> es una de las siguientes opciones:
  • Está fuera del alcance (no está disponible en el flujo específico en el que se ejecuta la política) o
  • No es uno de los valores válidos request, response o message.
steps.jsonthreatprotection.NonMessageVariable 500 Este error se produce si el elemento <Source> se establece en una variable que no es del tipo message.

Errores en la implementación

Ninguno

Variables con fallas

Estas variables se establecen cuando esta política activa un error. Para obtener más información, consulta Qué debes saber sobre los errores de la política.

Variables Donde Ejemplo
fault.name="fault_name" fault_name es el nombre de la falla, como se indica en la tabla de Errores del entorno de ejecución anterior. El nombre de la falla es la última parte del código de la falla. fault.name Matches "SourceUnavailable"
jsonattack.policy_name.failed policy_name es el nombre especificado por el usuario de la política que generó la falla. jsonattack.JTP-SecureRequest.failed = true

Ejemplo de respuesta de error

{
  "fault": {
    "faultstring": "JSONThreatProtection[JPT-SecureRequest]: Execution failed. reason: JSONThreatProtection[JTP-SecureRequest]: Exceeded object entry name length at line 2",
    "detail": {
      "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
    }
  }
}

Ejemplo de regla de falla

<FaultRule name="JSONThreatProtection Policy Faults">
    <Step>
        <Name>AM-CustomErrorResponse</Name>
        <Condition>(fault.name Matches "ExecutionFailed") </Condition>
    </Step>
    <Condition>(jsonattack.JPT-SecureRequest.failed = true) </Condition>
</FaultRule>

Esquemas

Notas de uso

Al igual que los servicios basados en XML, las API que admiten la notación de objetos de JavaScript (JSON) son vulnerables a los ataques a nivel de contenido. Los ataques JSON simples intentan usar estructuras que sobrecarguen los analizadores de JSON para hacer fallar un servicio e inyectar ataques de denegación del servicio a nivel de la aplicación. Todas las opciones de configuración son opcionales y se deben ajustar para optimizar los requisitos de tu servicio contra posibles vulnerabilidades.

Temas relacionados

Política JSONtoXML

Política XMLThreatProtection

Política RegularExpressionProtection