Pular para conteúdo

Rate Limit

Alterar regra

Rate Limit disponível a partir do plano CUSTOM

Alterar uma regra de rate limit.

PUT /v1/rules/ratelimit/{dominio}/{id}

$ curl -i https://api.gocache.com.br/v1/rules/ratelimit/seudominio.com.br \
-X PUT \
-H 'GoCache-Token:seu_token' \
-d 'match[host]=www.gocache.com.br' \
-d 'match[scheme]=http*' \
-d 'match[request_uri]=/static/js/*' \
-d 'match[request_method]=GET' \
-d 'match[request_method]=POST' \
-d 'match[remote_address]=255.255.255.0/24' \
-d 'match[cookie]=mycookie1,mycookie2,mycookie3' \
-d 'match[cookie_content]=mycookie1=123*' \
-d 'match[http_referer]=www.google.com.br' \
-d 'match[header]=Accept:*' \
-d 'match[http_user_agent]=*Mozilla*' \
-d 'match[origin_country]=US|UK' \
-d 'match[origin_continent]=SA|EU|OC' \
-d 'match[bots]=others' \
\
-d 'action[rate_limit_action]=block' \
-d 'action[rate_limit_amount]=600' \
-d 'action[rate_limit_period]=3600' \
-d 'action[rate_limit_block_ttl]=600'
<?php

$ch = curl_init("https://api.gocache.com.br/v1/rules/ratelimit/seudominio.com.br");

curl_setopt($ch, CURLOPT_PUT, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array("GoCache-Token: seu_token"));

$urls = array(
        "match[host]=www.gocache.com.br",
        "match[scheme]=http*",
        "match[request_uri]=/static/js/*",
        "match[request_method]=GET",
        "match[request_method]=POST",
        "match[remote_address]=255.255.255.0/24",
        "match[cookie]=mycookie1,mycookie2,mycookie3",
        "match[cookie_content]=mycookie1=123*",
        "match[http_referer]=www.google.com.br",
        "match[header]=Accept:*",
        "match[http_user_agent]=*Mozilla*",
        "match[origin_country]=US|UK",
        "match[origin_continent]=SA|EU|OC",
        "match[bots]=others",

        "action[rate_limit_action]=block",
        "action[rate_limit_amount]=300",
        "action[rate_limit_period]=3600",
        "action[rate_limit_block_ttl]=600"
        );

curl_setopt($ch, CURLOPT_POSTFIELDS, implode("&", $urls));

$response = curl_exec($ch);
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

curl_close($ch);
?>

Parâmetros

Campo Opcional Tipo Descrição
metadata Object
 status Boolean Indica se a regra está ativa ou inativa
Valor padrão: true

Valores permitidos: true, false
 name String Nome da regra
 notes String Descrição da regra
match Object Critério da regra
 host String Domínio/subdomínio de acesso do site. Ex: www.gocache.com.br
 scheme String Protocolo de acesso.
Valores permitidos: http, https, http*
 request_uri String URI. Ex: /admin/*
 http_user_agent String User agent. Suporta wildcard "(*)". Ex: "*Mozilla*"
 cookie String Se possui um cookie, de uma lista de um ou mais cookies, presente. Pode ser mais de um, separado por vírgula. Suporta wildcard "(*)". Ex: wp_login,wp_test
 cookie_content String Se um cookie possui um valor específico. O nome e o valor são separados igual (=). Suporta wildcard "(*)" no valor do cookie. Ex: wp_test=yes
 request_method Array Método da requisição
Valores permitidos: GET, POST, PUT, DELETE
 http_referer String Referer da requisição
 remote_address String IP ou range de IP da origem da requisição. Para ranges apenas as máscaras /32, /24 e /16 estão disponíveis
 header String Se a requisiço possui um cabeçalho específico. O nome e o valor são separados por dois-pontos (:). Suporta wildcard "(*)" no valor do cabeçalho. Ex Accept:*
 origin_country String País de origem
Valores permitidos: "BR", "US", "CN", "RU", "..."
 origin_continent Array Continente de origem
Valores permitidos: "SA", "NA", "OC", "EU", "AF", "AS"
 bots String Bots conhecidos
Valores permitidos: "good", "others"
action Object Ação
 rate_limit_amount Number A quantidade de acessos limite para ativar a regra.
Valores permitidos: 10-10000
 rate_limit_period Number Define o tempo mínimo (em segundos) para que a quantidade de acessos em rate_limit_amount ativem a regra.
Valores permitidos: 86400, 43200, 14400, 3600, 1800, 600, 300, 120, 60, 30, 10
 rate_limit_block_ttl Number Define o tempo mínimo (em segundos) de bloqueio após a regra ser ativada. Funciona somente se rate_limit_action for block
Valores permitidos:86400, 43200, 14400, 3600, 1800, 600, 300, 120, 60
 rate_limit_action String Define modo de operação de uma regra ativa. A ação block faz o bloqueio dos acessos, challenge mostrará uma página de desafio para validar o usuário e simulate apenas contabiliza os acessos e gera eventos.
Valores permitidos: "block", "challenge", "simulate"

Exemplo de sucesso

HTTP/1.1 200 OK
{
    "response": {
        "msg": "Success"
    }
}   
<?php

if( $statusCode == 200 ) {

    echo("Sucesso!\n");

    $obj = json_decode($response);

    echo("ID da regra criada: " . $obj->response->id);

}
?>

Criar regra

Criar regra de rate limit.

POST /v1/rules/ratelimit/{dominio}
$ curl -i https://api.gocache.com.br/v1/rules/ratelimit/seudominio.com.br \
-X POST \
-H 'GoCache-Token:seu_token' \
-d 'match[host]=www.gocache.com.br' \
-d 'match[scheme]=http*' \
-d 'match[request_uri]=/static/js/*' \
-d 'match[request_method]=GET' \
-d 'match[request_method]=POST' \
-d 'match[remote_address]=255.255.255.0/24' \
-d 'match[cookie]=mycookie1,mycookie2,mycookie3' \
-d 'match[cookie_content]=mycookie1=123*' \
-d 'match[http_referer]=www.google.com.br' \
-d 'match[header]=Accept:*' \
-d 'match[http_user_agent]=*Mozilla*' \
-d 'match[origin_country]=US|UK' \
-d 'match[origin_continent]=SA|EU|OC' \
-d 'match[bots]=others' \
\
-d 'action[rate_limit_action]=block' \
-d 'action[rate_limit_amount]=600' \
-d 'action[rate_limit_period]=3600' \
-d 'action[rate_limit_block_ttl]=600'
<?php

$ch = curl_init("https://api.gocache.com.br/v1/rules/ratelimit/seudominio.com.br");

curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array("GoCache-Token: seu_token"));

$urls = array(
        "match[host]=www.gocache.com.br",
        "match[scheme]=http*",
        "match[request_uri]=/static/js/*",
        "match[request_method]=GET",
        "match[request_method]=POST",
        "match[remote_address]=255.255.255.0/24",
        "match[cookie]=mycookie1,mycookie2,mycookie3",
        "match[cookie_content]=mycookie1=123*",
        "match[http_referer]=www.google.com.br",
        "match[header]=Accept:*",
        "match[http_user_agent]=*Mozilla*",
        "match[origin_country]=US|UK",
        "match[origin_continent]=SA|EU|OC",
        "match[bots]=others",

        "action[rate_limit_action]=block",
        "action[rate_limit_amount]=300",
        "action[rate_limit_period]=3600",
        "action[rate_limit_block_ttl]=600"
        );

curl_setopt($ch, CURLOPT_POSTFIELDS, implode("&", $urls));

$response = curl_exec($ch);
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

curl_close($ch);
?>

Parâmetros

Campo Opcional Tipo Descrição
metadata Object
 status Boolean Indica se a regra está ativa ou inativa
Valor padrão: true

Valores permitidos: true, false
 name String Nome da regra
 notes String Descrição da regra
match Object Critério da regra
 host String Domínio/subdomínio de acesso do site. Ex: www.gocache.com.br
 scheme String Protocolo de acesso.
Valores permitidos: http, https, http*
 request_uri String URI. Ex: /admin/*
 http_user_agent String User agent. Suporta wildcard "(*)". Ex: "*Mozilla*"
 cookie String Se possui um cookie, de uma lista de um ou mais cookies, presente. Pode ser mais de um, separado por vírgula. Suporta wildcard "(*)". Ex: wp_login,wp_test
 cookie_content String Se um cookie possui um valor específico. O nome e o valor são separados igual (=). Suporta wildcard "(*)" no valor do cookie. Ex: wp_test=yes
 request_method Array Método da requisição
Valores permitidos: GET, POST, PUT, DELETE
 http_referer String Referer da requisição
 remote_address String IP ou range de IP da origem da requisição. Para ranges apenas as máscaras /32, /24 e /16 estão disponíveis
 header String Se a requisiço possui um cabeçalho específico. O nome e o valor são separados por dois-pontos (:). Suporta wildcard "(*)" no valor do cabeçalho. Ex Accept:*
 origin_country String País de origem
Valores permitidos: "BR", "US", "CN", "RU", "..."
 origin_continent Array Continente de origem
Valores permitidos: "SA", "NA", "OC", "EU", "AF", "AS"
 bots String Bots conhecidos
Valores permitidos: "good", "others"
action Object Ação
 rate_limit_amount Number A quantidade de acessos limite para ativar a regra.
Valores permitidos: 10-10000
 rate_limit_period Number Define o tempo mínimo (em segundos) para que a quantidade de acessos em rate_limit_amount ativem a regra.
Valores permitidos: 86400, 43200, 14400, 3600, 1800, 600, 300, 120, 60, 30, 10
 rate_limit_block_ttl Number Define o tempo mínimo (em segundos) de bloqueio após a regra ser ativada. Funciona somente se rate_limit_action for block
Valores permitidos:86400, 43200, 14400, 3600, 1800, 600, 300, 120, 60
 rate_limit_action String Define modo de operação de uma regra ativa. A ação block faz o bloqueio dos acessos, challenge mostrará uma página de desafio para validar o usuário e simulate apenas contabiliza os acessos e gera eventos.
Valores permitidos: "block", "challenge", "simulate"

Exemplo de sucesso

HTTP/1.1 200 OK
{
    "response": {
        "id": "aXBfYWRkcmVzcy1kZWZhdWx0fGlwX2FkZHJlc3N8MS4xLjEuMQ=="
    }
}
<?php

if( $statusCode == 200 ) {

    echo("Sucesso!\n");

    $obj = json_decode($response);

    echo("ID da regra criada: " . $obj->response->id);

}
?>

Listar regras

Listar regras de rate limit de um domínio.

GET /v1/rules/ratelimit/{dominio}
$ curl -i https://api.gocache.com.br/v1/rules/ratelimit/seudominio.com.br \
-X GET \
-H 'GoCache-Token:seu_token' 
<?php

$ch = curl_init("https://api.gocache.com.br/v1/rules/ratelimit/seudominio.com.br");

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array("GoCache-Token: seu_token"));

$response = curl_exec($ch);
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

curl_close($ch);
?>

Exemplo de sucesso

HTTP/1.1 200 OK
{
    "response": {
            "rules": [{
                "match": {
                    "host": "www.gocache.com.br",
                    "request_method": ["POST", "DELETE"]
                },
                "action": {
                    "rate_limit_amount": "300",
                    "rate_limit_action": "challenge",
                    "rate_limit_period": "3600"
                    "rate_limit_block_ttl": "60",
                },
                "id": "aabbccddeeff",
                "metadata": {
                    "name": "Mostrar challenge em POST e DELETE",
                    "status": "true"
                    }
            },
            {
                    "match": {
                        "origin_country": "US|UK"
                    },
                    "action": {
                        "rate_limit_action": "simulate",
                        "rate_limit_block_ttl": "3600",
                        "rate_limit_period": "3600",
                        "rate_limit_amount": "300",

                    },
                    "id": "gghhiijjkkll",
                    "metadata": {
                        "name": "Mostrar eventos de rate limit para Estados Unidos e UK",
                        "status": "false"
                    }
            }]
        }
}
<?php

if( $statusCode == 200 ) {

        echo("Sucesso!\n");

        $obj = json_decode($response);

        foreach($obj->response->rules as $rule) {

            echo("\n<br /><br />\n");
            echo("Regra rate limit:" . "<br />\n");
            echo("ID: " . $rule->id . "<br />\n");

            foreach($rule->match as $match_type => $match_value) {

                echo("Match " . $match_type . ": " . $match_value . "<br />\n");
            }

            foreach($rule->action as $action_type => $action_value) {

                echo("Action: " . $action_type . ": " . $action_value . "<br />\n");
            }

            if($rule->metadata->status == "true") {

                echo("Rule is enabled<br />\n");

            } else {

                echo("Rule is disabled<br />\n");
            }
        }
}
?>

Remover regra

Remover uma regra de ratelimit.

DELETE /v1/rules/ratelimit/{dominio}/{id}
$ curl -i https://api.gocache.com.br/v1/rules/ratelimit/seudominio.com.br/aabbccddeeffgghh \
-X DELETE \
-H 'GoCache-Token:seu_token'
<?php

$ch = curl_init("https://api.gocache.com.br/v1/rules/ratelimit/seudominio.com.br/aabbccddeeffgghh");

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array("GoCache-Token: seu_token"));

$response = curl_exec($ch);
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

curl_close($ch);
?>

Exemplo de sucesso

HTTP/1.1 200 OK
{
    "response": {
        "msg": "Success"
    }
}
<?php

if( $statusCode == 200 ) {

    echo("Sucesso!\n");

    $obj = json_decode($response);

    echo($obj->response->msg);

}
?>