---
name: azion-instale-a-integracao-request-variation-controller
description: >-
  Instale Request Variation Controller pelo Azion Marketplace e execute-a em uma application para contar quantas vezes um usuário altera argumentos.
---

# Instale a integração Request Variation Controller

Request Variation Controller conta quantas requisições diferentes um usuário faz em sequência para uma application e sinaliza o usuário que ultrapassa o máximo que você permite. São duas integrações que executam na mesma application, e ambas fazem parte das [integrações do Marketplace](/pt-br/documentacao/plataforma/marketplace/integracoes/). Na fase de resposta, o **Hash Generator** cria ou atualiza um cookie assinado que rastreia os argumentos que o usuário, ou a origem, envia entre as requisições. Na fase de requisição, o **Hash Validator** lê esse cookie, verifica o número de variações e marca a requisição quando o usuário ultrapassa o máximo.

Sete objetos precisam existir antes que uma requisição seja verificada: as duas functions instaladas, uma application com os módulos **Functions** e **Application Accelerator** ativados, uma function instance por integração e uma regra do Rules Engine por instância.

---

## Pré-requisitos

- Uma conta Azion. Para entrar, consulte [Como acessar o Azion Console](/pt-br/documentacao/guias/plataforma/conta-e-billing/como-acessar-o-azion-console/).
- Uma [application](/pt-br/documentacao/plataforma/applications/) servida por um [workload](/pt-br/documentacao/plataforma/workloads/). Para criar uma, consulte [Primeiros passos com Applications](/pt-br/documentacao/plataforma/applications/primeiros-passos/).
- Ativar um produto ou um módulo pode gerar custos de uso. Para mais informações, consulte [Preços](/pt-br/documentacao/fundamentos/precos/).

---

## Instale as integrações

Cada instalação adiciona uma function à sua conta. Para instalar as duas pelo Azion Console:

1. **Abra o Marketplace**

   Acesse [Azion Console](https://console.azion.com/) > **Marketplace**.

2. **Encontre o Hash Generator**

   Digite `variation` no campo **Search on Marketplace** e selecione o card **Request Variation Controller - Hash Generator**. Navegar pelos cards leva à mesma página.

3. **Selecione Install**

4. **Instale o Hash Validator**

   Volte ao **Marketplace**, selecione o card **Request Variation Controller - Hash Validator** e selecione **Install**.

Cada card mostra `Successfully installed!` e `Latest version installed!`, e as duas functions aparecem na lista **Function** do drawer **Create Instance**.

---

## Ative o módulo Functions

Uma application executa uma function instalada somente quando o módulo **Functions** dela está ativado. A regra que executa o Hash Validator também usa o behavior **Forward Cookies**, que exige o módulo **Application Accelerator**. Para ativar os dois módulos:

1. **Abra sua application**

   Acesse [Azion Console](https://console.azion.com/) > **Applications** > **sua application**.

2. **Abra a seção Modules**

   Na aba **Main Settings**, vá até a seção **Modules**.

3. **Ative o switch Functions**

4. **Ative o switch Application Accelerator**

5. **Selecione Save**

O Azion Console confirma que a application foi atualizada.

---

## Crie as function instances

Cada integração precisa da própria function instance, com os próprios argumentos. O Hash Generator executa na fase de resposta e o Hash Validator na fase de requisição. Para criar as duas instâncias na sua application:

1. **Abra a aba Functions Instances**

   Em **Applications**, selecione sua application e selecione a aba **Functions Instances**.

2. **Selecione + Function**

   Uma application que ainda não tem instância oferece a mesma ação como **Function Instance**. O drawer **Create Instance** abre.

3. **Nomeie a instância**

   Em **Name**, digite um nome único que identifique a instância. Por exemplo: `variation-generator`.

4. **Selecione a function**

   Em **Function**, selecione a function *Variation Request - Hash Generator*. O editor **Arguments** é preenchido com os argumentos padrão da integração.

5. **Edite os argumentos**

   Em **Arguments**, digite os argumentos do Hash Generator descritos abaixo.

6. **Selecione Save**

7. **Crie a instância do Hash Validator**

   Repita estes passos com um nome como `variation-validator`, a function *Variation Request - Hash Validator* e os argumentos do Hash Validator.

As duas instâncias aparecem na aba **Functions Instances** com os nomes que você digitou.

### Argumentos do Hash Generator

O Hash Generator executa na fase de resposta e recebe estes argumentos:

```json
{
    "cookie_name": "azn",
    "cookie_secret": "1234567890123456",
    "cookie_max_age": 45,
    "args_list": ["http_x_something", "http_x_another_thing",
    "request_body_userid"]
}
```

| Chave            | Descrição                                                                                                                                                            |
| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `cookie_name`    | O nome do cookie. O valor padrão é `azn`                                                                                                                             |
| `cookie_secret`  | A chave que criptografa o cookie assinado. O algoritmo de criptografia é AES-128, então a chave deve ter exatamente 16 caracteres                                    |
| `cookie_max_age` | O tempo até o cookie expirar. Sem valor, `null` ou nenhum, o cookie é um cookie de sessão. O valor padrão é `45`                                                     |
| `args_list`      | As variáveis do nginx analisadas na requisição do usuário. Cada alteração aumenta a contagem de alterações, e a contagem decide se o acesso é bloqueado ou permitido |

### Argumentos do Hash Validator

O Hash Validator executa na fase de requisição e recebe estes argumentos:

```json
{
"cookie_name": "azn",
"cookie_secret": "1234567890123456",
"max_variation": 6,
"max_unique_variation": 2
}
```

| Chave                  | Descrição                                                                    |
| ---------------------- | ---------------------------------------------------------------------------- |
| `cookie_name`          | O nome do cookie. Deve ser o mesmo dos argumentos do Hash Generator          |
| `cookie_secret`        | A chave secreta do cookie. Deve ser a mesma dos argumentos do Hash Generator |
| `max_variation`        | O número máximo de variações de qualquer tipo nos parâmetros                 |
| `max_unique_variation` | O número máximo de variações únicas nos parâmetros                           |

O Hash Validator descriptografa o cookie assinado e verifica se um limite de variação foi atingido. Se foi, a function anexa um cabeçalho de requisição chamado `[COOKIE_ NAME]-[VIOLATION TYPE]-[TRUE]`.

### Tipos de violação

Uma violação assume um de três tipos. Os exemplos usam um cookie que muda de nenhum valor para `A` na primeira requisição, de `A` para `B` na segunda, para `C` na terceira, de `B` para `C` na quarta, de `B` para `A` na quinta e para `A` na sexta.

- **All variations**: conta cada vez que o valor do cookie mudou, incluindo valores repetidos. O exemplo tem 5 variações. Com o nome de cookie padrão, a violação adiciona o cabeçalho `http_cookie_name_any_variation_violation` à requisição.
- **Unique variations**: conta os valores distintos atribuídos ao cookie desde que ele foi criado. O exemplo tem 3, porque o cookie teve apenas `A`, `B` e `C`. Com o nome de cookie padrão, a violação adiciona o cabeçalho `http_cookie_name_unique_variation_violation` à requisição.
- **Signature violation**: ocorre quando a function não consegue descriptografar o cookie assinado, porque ele foi assinado com outra chave ou alterado no lado do cliente. Com o nome de cookie padrão, a violação adiciona o cabeçalho `http_cookie_name_signature_violation` à requisição.

---

## Crie as regras

Cada instância executa somente quando uma regra do Rules Engine a chama. A regra do Hash Generator executa na fase de resposta. A regra do Hash Validator executa na fase de requisição e adiciona o behavior **Forward Cookies**, que exige o módulo **Application Accelerator**. As duas regras abaixo correspondem a todas as requisições. Para criar as regras:

1. **Abra a aba Rules Engine**

   Em **Applications**, selecione sua application e selecione a aba **Rules Engine**.

2. **Selecione + Rule**

3. **Nomeie a regra do Hash Generator**

   Em **Name**, digite um nome para a regra. Por exemplo: `Track request variations`. A **Description** é opcional.

4. **Selecione a fase de resposta**

   Na seção **Phase**, selecione *Response Phase*.

5. **Defina o critério**

   Na seção **Criteria**, mantenha a variável `${uri}` e o operador *starts with* e digite `/` como argumento.

6. **Adicione o behavior Run Function**

   Na seção **Behaviors**, selecione *Run Function* e selecione a instância do Hash Generator pelo nome.

7. **Selecione Save**

8. **Crie a regra do Hash Validator**

   Selecione **+ Rule** novamente. Digite um nome, selecione *Request Phase* e defina o mesmo critério.

9. **Adicione o behavior Run Function**

   Na seção **Behaviors**, selecione *Run Function* e selecione a instância do Hash Validator pelo nome.

10. **Adicione o behavior Forward Cookies**

    Selecione **Add Behavior** e selecione *Forward Cookies*.

11. **Selecione Save**

A aba **Rules Engine** lista uma regra na fase de resposta e uma na fase de requisição. Uma requisição que ultrapassa um limite de variação chega à sua application com o cabeçalho de violação.

Para conhecer cada critério e behavior que uma regra aceita, consulte [Rules Engine para Applications](/pt-br/documentacao/plataforma/applications/rules-engine/).

---

## Próximos passos

- [Integrações do Marketplace](/pt-br/documentacao/plataforma/marketplace/integracoes.md): As integrações que o Marketplace oferece e a application ou o firewall em que cada uma executa.
- [Rules Engine para Applications](/pt-br/documentacao/plataforma/applications/rules-engine.md): Os critérios e behaviors que uma regra aceita, incluindo Run Function e Forward Cookies.
- [Instale a integração Signed Cookies](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/integracoes/signed-cookies.md): Como detectar cookies alterados no lado do cliente com um hash generator e um hash validator.
- [Atualize uma integração](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/integracoes/atualizar-uma-integracao.md): Como obter a versão mais recente de uma integração instalada e o que uma atualização cria.
