Esta página se aplica à Apigee e à Apigee híbrida.
Confira a documentação da
Apigee Edge.
A política XMLThreatProtection permite resolver vulnerabilidades de XML e minimizar ataques à sua API. Você também pode usar a política para detectar ataques de payload XML com base nos limites configurados. Proteja-se contra ameaças XML usando as seguintes abordagens:
- Detecte mensagens corrompidas ou malformadas antes de analisá-las.
- Avalie o conteúdo da mensagem com palavras-chave ou padrões específicos a serem excluídos.
Esta é uma política extensível. O uso dela pode ter implicações no custo ou na utilização, dependendo da sua licença da Apigee. Para informações sobre tipos de política e implicações de uso, consulte Tipos de política.
Referência de elemento
A referência de elemento descreve os elementos e atributos da política XMLThreatProtection.
<XMLThreatProtection async="false" continueOnError="false" enabled="true" name="XML-Threat-Protection-1"> <DisplayName>XML Threat Protection 1</DisplayName> <NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits> <Source>request</Source> <StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits> <ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits> </XMLThreatProtection>
Atributos de <XMLThreatProtection>
<XMLThreatProtection async="false" continueOnError="false" enabled="true" name="XML-Threat-Protection-1">
A tabela a seguir descreve atributos comuns a todos os elementos pai de políticas:
| Atributo | Descrição | Padrão | Presence |
|---|---|---|---|
name |
O nome interno da política. O valor do atributo Opcionalmente, use o elemento |
N/A | Obrigatório |
continueOnError |
Defina como Defina como |
false | Opcional |
enabled |
Defina como Defina como |
true | Opcional |
async |
Esse atributo está obsoleto. |
false | Descontinuado |
Elemento <DisplayName>
Use em conjunto com o atributo name para rotular a política no
editor de proxy da IU de gerenciamento com um nome de linguagem natural diferente.
<DisplayName>Policy Display Name</DisplayName>
| Padrão |
N/A Se você omitir esse elemento, será usado o valor do atributo |
|---|---|
| Presence | Opcional |
| Tipo | String |
Elemento <NameLimits>
Especifica os limites de caracteres a serem verificados e aplicados pela política.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
| Padrão: | N/A |
| Presença: | Opcional |
| Tipo: | N/A |
Elemento <NameLimits>/<Element>
Especifica o limite do número máximo de caracteres permitidos em qualquer nome de elemento no documento XML.
Por exemplo, considere o seguinte XML:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
Ao analisar o XML acima, o valor do elemento <Element> no snippet da política
abaixo validará os nomes dos elementos (book , title,
author e year)) não exceder 10 caracteres.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
| Padrão: | Se você não especificar um limite, o sistema aplicará um valor padrão de -1,
que o sistema equivale a não limitar. |
| Presença: | Opcional |
| Tipo: | Número inteiro |
Elemento <NameLimits>/<Attribute>
Especifica o limite do número máximo de caracteres permitidos em qualquer nome de atributo no documento XML.
Por exemplo, considere o seguinte XML:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
Ao analisar o XML acima, o valor do elemento <Attribute> no snippet de política
abaixo validará que o nome do atributo category não excede
10 caracteres.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
| Padrão: | Se você não especificar um limite, o sistema aplicará um valor padrão de -1,
que o sistema equivale a não limitar. |
| Presença: | Opcional |
| Tipo: | Número inteiro |
Elemento <NameLimits>/<NamespacePrefix>
Especifica um limite para o número máximo de caracteres permitido no prefixo do namespace no documento XML.
Por exemplo, considere o seguinte XML:
<ns1:myelem xmlns:ns1="http://ns1.com"/>
Ao analisar o XML acima, o valor do elemento <NamespacePrefix> no
snippet de política abaixo validará que o prefixo de namespace ns1 não excede
10 caracteres.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
| Padrão: | Se você não especificar um limite, o sistema aplicará um valor padrão de -1,
que o sistema equivale a não limitar. |
| Presença: | Opcional |
| Tipo: | Número inteiro |
Elemento <NameLimits>/<ProcessingInstructionTarget>
Especifica um limite para o número máximo de caracteres permitido para qualquer instrução de processamento no documento XML.
Por exemplo, considere o seguinte XML:
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
Ao analisar o XML acima, o valor do elemento <ProcessingInstructionTarget> no snippet de política abaixo validará que o destino da instrução de processamento
xml-stylesheet não excede 10 caracteres.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
| Padrão: | Se você não especificar um limite, o sistema aplicará um valor padrão de -1,
que o sistema equivale a não limitar. |
| Presença: | Opcional |
| Tipo: | Número inteiro |
Elemento <Source>
Mensagem a ser filtrada para ataques de payload XML. Geralmente, isso é definido como
request, porque normalmente será necessário validar as solicitações de entrada dos aplicativos cliente.
Quando definido como message, esse elemento avalia automaticamente a mensagem de solicitação
quando ele está anexado ao fluxo de solicitação e a mensagem de resposta quando anexado ao
fluxo.
<Source>request</Source>
| Padrão: | solicitação |
| Presença: | Opcional |
| Tipo: |
String. Selecione entre |
Elemento <StructuralLimits>
Especifica os limites estruturais a serem verificados e aplicados pela política.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
| Padrão: | N/A |
| Presença: | Opcional |
| Tipo: | N/A |
Elemento <StructuralLimits>/<NodeDepth>
Especifica a profundidade máxima do nó permitida no XML.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
| Padrão: | Se você não especificar um limite, o sistema aplicará um valor padrão de -1,
que o sistema equivale a não limitar. |
| Presença: | Opcional |
| Tipo: |
Número inteiro |
Elemento <StructuralLimits>/<AttributeCountPerElement>
Especifica o número máximo de atributos permitidos para qualquer elemento.
Por exemplo, considere o seguinte XML:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
<AttributeCountPerElement> no snippet de política abaixo validará se os elementos book, title,
author, e year não têm mais de 2 atributos cada.
Observe que os atributos usados para definir os namespaces não são contados.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
| Padrão: | Se você não especificar um limite, o sistema aplicará um valor padrão de -1,
que o sistema equivale a não limitar. |
| Presença: | Opcional |
| Tipo: |
Número inteiro |
Elemento <StructuralLimits>/<NameSpaceCountPerElement>
Especifica o número máximo de definições de namespace permitidas para qualquer elemento.
Por exemplo, considere o seguinte XML:
<e1 attr1="val1" attr2="val2">
<e2 xmlns="http://apigee.com" xmlns:yahoo="http://yahoo.com" one="1" yahoo:two="2"/>
</e1>Ao analisar o XML acima, o valor do elemento <NamespaceCountPerElement>
no snippet de política abaixo validará se os elementos e1 e e2
não têm mais de 2 definições de namespace cada. Nesse caso, <e1> tem 0 definições de namespace e
<e2> tem duas definições de
namespace: xmlns="http://apigee.com" e
xmlns:yahoo="http://yahoo.com":
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
| Padrão: | Se você não especificar um limite, o sistema aplicará um valor padrão de -1,
que o sistema equivale a não limitar. |
| Presença: | Opcional |
| Tipo: |
Número inteiro |
Elemento <StructuralLimits>/<ChildCount>
Especifica o número máximo de elementos filhos permitidos para qualquer elemento.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
| Padrão: | Se você não especificar um limite, o sistema aplicará um valor padrão de -1,
que o sistema equivale a não limitar. |
| Presença: | Opcional |
| Tipo: |
Número inteiro |
Atributos
| Atributo | Padrão | Presença |
|---|---|---|
| includeComment | verdadeiro | Opcional |
| includeElement | verdadeiro | Opcional |
| includeProcessingInstructions | verdadeiro | Opcional |
| includeText | verdadeiro | Opcional |
Elemento <ValueLimits>
Especifica os limites de caracteres para os valores a serem verificados e aplicados pela política.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
| Padrão: | N/A |
| Presença: | Opcional |
| Tipo: |
N/A |
Elemento <ValueLimits>/<Text>
Especifica um limite de caracteres para qualquer nó de texto presente no documento XML.
Por exemplo, considere o seguinte XML:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
<Text> no snippet de política
abaixo validará que os valores de texto do elemento Learning XML, Erik T.
Ray, e 2003 não excedem 15 caracteres cada.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
| Padrão: | Se você não especificar um limite, o sistema aplicará um valor padrão de -1,
que o sistema equivale a não limitar. |
| Presença: | Opcional |
| Tipo: |
Número inteiro |
Elemento <ValueLimits>/<Attribute>
Especifica um limite de caracteres para quaisquer valores de atributo presentes no documento XML.
Por exemplo, considere o seguinte XML:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
<Attribute> no snippet de política
abaixo validará se o valor do atributo WEB não excede
10 caracteres.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
| Padrão: | Se você não especificar um limite, o sistema aplicará um valor padrão de -1,
que o sistema equivale a não limitar. |
| Presença: | Opcional |
| Tipo: |
Número inteiro |
Elemento <ValueLimits>/<NamespaceURI>
Especifica um limite de caracteres para os URIs de namespace presentes no documento XML.
Por exemplo, considere o seguinte XML:
<ns1:myelem xmlns:ns1="http://ns1.com"/>
<NamespaceURI> no snippet de política
abaixo se que o valor de URI do namespace http://ns1.com não exce 10 caracteres.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
| Padrão: | Se você não especificar um limite, o sistema aplicará um valor padrão de -1,
que o sistema equivale a não limitar. |
| Presença: | Opcional |
| Tipo: |
Número inteiro |
Elemento <ValueLimits>/<Comment>
Especifica um limite de caracteres para os comentários presentes no documento XML.
Por exemplo, considere o seguinte XML:
<book category="WEB"> <!-- This is a comment --> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
<Comment> no snippet de política
abaixo validará que o texto do comentário This is a comment não excede
10 caracteres.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
| Padrão: | Se você não especificar um limite, o sistema aplicará um valor padrão de -1,
que o sistema equivale a não limitar. |
| Presença: | Opcional |
| Tipo: |
Número inteiro |
Elemento <ValueLimits>/<ProcessingInstructionData>
Especifica um limite de caracteres para qualquer texto de instrução de processamento presente no documento XML.
Por exemplo, considere o seguinte XML:
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<ProcessingInstructionData> no snippet de política abaixo validará se o texto da instrução de processamento
type="text/xsl" href="style.xsl" não excede 10 caracteres.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
| Padrão: | Se você não especificar um limite, o sistema aplicará um valor padrão de -1,
que o sistema equivale a não limitar. |
| Presença: | Opcional |
| Tipo: |
Número inteiro |
Referência de erros
Esta secção descreve os códigos de falha e as mensagens de erro devolvidas, bem como as variáveis de falha definidas pelo Apigee quando esta política aciona um erro. Estas informações são importantes para saber se está a desenvolver regras de falhas para tratar falhas. Para saber mais, consulte o artigo O que precisa de saber acerca dos erros de políticas e o artigo Processamento de falhas.
Erros de tempo de execução
Estes erros podem ocorrer quando a política é executada.
| Código de falha | Estado de HTTP | Causa | Corrigir |
|---|---|---|---|
steps.xmlthreatprotection.ExecutionFailed |
500 |
A política de XMLThreatProtection pode gerar muitos tipos diferentes de erros de ExecutionFailed.
A maioria destes erros ocorre quando é excedido um limite específico definido na política. Estes tipos de erros incluem:
comprimento do nome do elemento,
contagem de filhos,
profundidade do nó,
contagem de atributos,
comprimento do nome do atributo,
e muitos outros. Pode ver a lista completa no tópico Resolução de problemas de erros de tempo de execução da política XMLThreatProtection.
|
build |
steps.xmlthreatprotection.InvalidXMLPayload |
500 |
Este erro ocorre se a carga útil da mensagem de entrada especificada pelo elemento <Source> da política XMLThreatProtection não for um documento XML válido.
|
build |
steps.xmlthreatprotection.SourceUnavailable |
500 |
Este erro ocorre se a variável message
especificada no elemento <Source> for:
|
build |
steps.xmlthreatprotection.NonMessageVariable |
500 |
Este erro ocorre se o elemento <Source> estiver definido para uma variável que não seja do tipo message.
|
build |
Erros de implementação
Nenhum.
Variáveis de falha
Estas variáveis são definidas quando ocorre um erro de tempo de execução. Para mais informações, consulte o artigo O que precisa de saber acerca dos erros de políticas.
| Variáveis | Onde | Exemplo |
|---|---|---|
fault.name="fault_name" |
fault_name é o nome da falha, conforme indicado na tabela Erros de tempo de execução acima. O nome da falha é a última parte do código de falha. | fault.name Matches "SourceUnavailable" |
xmlattack.policy_name.failed |
policy_name é o nome especificado pelo utilizador da política que gerou a falha. | xmlattack.XPT-SecureRequest.failed = true |
Exemplo de resposta de erro
{ "fault": { "faultstring": "XMLThreatProtection[XPT-SecureRequest]: Execution failed. reason: XMLThreatProtection[XTP-SecureRequest]: Exceeded object entry name length at line 2", "detail": { "errorcode": "steps.xmlthreatprotection.ExecutionFailed" } } }
Exemplo de regra de falha
<FaultRule name="XML Threat Protection Policy Faults">
<Step>
<Name>AM-CustomErrorResponse</Name>
<Condition>(fault.name Matches "ExecutionFailed") </Condition>
</Step>
<Condition>(xmlattack.XPT-SecureRequest.failed = true) </Condition>
</FaultRule>Esquemas
Observações sobre uso
Qualquer servidor que recebe dados on-line está sujeito a ataque, seja malicioso ou não. Alguns ataques aproveitam a flexibilidade do XML ao criar documentos inválidos que podem comprometer sistemas de back-end. Documentos XML corrompidos ou extremamente complexos podem fazer com que os servidores aloquem mais memória do que disponível, adicionando recursos de CPU e memória, falhas de análise e, geralmente, desativando o processamento de mensagens e criando ataques de negação de serviço no nível dos aplicativos.
Configuração de erro da proteção contra ameaças
Informações importantes se você estiver criando FaultRules para essa política:por
padrão, a Apigee gera um código de status HTTP 500, "Erro de servidor interno" e um código de
erro "ExecutionFailed", caso uma mensagem não a tenha passar por uma política de proteção contra ameaças JSON ou XML. É possível alterar
esse comportamento de erro com uma nova propriedade no nível da organização. Ao definir a propriedade
organizacional features.isPolicyHttpStatusEnabled como "true", o seguinte
comportamento ocorre:
- Solicitação: com uma política de proteção contra ameaças anexada a qualquer fluxo de solicitação, mensagens inválidas retornam um código de status 400 400 Solicitação de solicitação com um código de erro de política correspondente (em vez de apenas ExecutionFailed).
- Resposta: com uma política de proteção contra ameaças anexada a qualquer fluxo de respostas, mensagens inválidas ainda retornam o código de status "500 Internal Server Error", e um dos códigos de erro de política correspondentes é gerado (em vez de do que apenas ExecutionFailed).
Os clientes do Cloud precisam entrar em contato com o Atendimento ao cliente do Google Cloud para definir a propriedade da organização.
curl -u email:password -X POST -H "Content-type:application/xml" http://host:8080/v1/o/myorg -d \ "<Organization type="trial" name="MyOrganization"> <Environments/> <Properties> <Property name="features.isPolicyHttpStatusEnabled">true</Property> ... </Properties> </Organization>"
Temas relacionados
Política de proteção de expressões regulares