Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
limitrr-php — Melhor limitação de taxa PHP usando Redis. | Kitploit
Ferramentas/GitHubGitHub/eddiejibson/limitrr-php
Autenticação e AutorizaçãoScripting e AutomaçãoSegurança WebUtilitários e FrameworksSegurança de API
GitHubeddiejibson/limitrr-php

limitrr-php

Melhor limitação de taxa PHP usando Redis.

Ver Repositório
2064há 6 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
chae

Limitação de taxa leve dentro do PHP usando Redis.

O Limitrr PHP é muito inspirado na minha outra biblioteca, Limitrr, que foi criada para NodeJS. Confira aqui

O Limitrr PHP permite que os usuários integrem facilmente a limitação de taxa em sua aplicação. Diferente de outros pacotes similares, este utilitário permite limitar não apenas pela quantidade de requisições, mas também pela quantidade de ações concluídas (por exemplo, permitir que um certo número de contas seja criado com sucesso em um intervalo de tempo) e ter tais restrições com opções personalizadas. Além disso, discriminadores personalizados são possíveis – você não precisa mais limitar apenas pelo IP do usuário.

Esta biblioteca também fornece uma função de middleware para facilitar a limitação de taxa em várias rotas que você possa ter em um projeto SlimPHP.

Se você aprecia este projeto, por favor, dê uma 🌟 no GitHub.

Pull Requests são bem-vindos

Instalação

Você pode instalar a biblioteca limitrr-php executando o seguinte comando no seu terminal (assumindo que você tem o composer instalado)

root@kitploit:~
composer require eddiejibson/limitrr-php "^1.0"

Guia Rápido

Uso Básico

root@kitploit:~
require "/vendor/autoload.php"; //Require composer's autoload

$options = [
    //Redis keystore information
    "redis" => [
        "host" => "666.chae.sh",
        "port" => 6379,
        "password" => "supersecret",
    ],
    "routes" => [
        "default" => [
            "requestsPerExpiry" => 5,
        ],
    ],

];

//Initialize the Limitrr class and pass the options defined above into it
//Note that the options are not required.
$limitrr = new \eddiejibson\limitrr\Limitrr($options);

//Various examples like this can be found further into the documentation,
//for each function.
$result = $limitrr->get(["discriminator" => $ip]);
echo $result["requests"] + " Requests";
echo $result["completed"] + " Completed";
//Note that this library is no means just for SlimPHP, it just happens to
//provide a middleware function for those who may need it.

//Usage within SlimPHP
$app = new Slim\App();

//Use the Limitrr SlimPHP middleware function, if you wish:
$app->add(new \eddiejibson\limitrr\RateLimitMiddleware($limitrr)); //Make sure to pass in the main Limitrr
//instance we defined above into the middleware function. This is mandatory.

//You can also add the get IP middleware function, it will append the user's real IP
//(behind Cloudflare or not) to the request.
$app->add(new \eddiejibson\limitrr\getIpMiddleware());

//Example usage within a route
$app->get("/hello/{name}", function ($request, $response, $args) {
    $name = $args["name"];
    $ip = $request->getAttribute('realip'); //Get the IP that was defined within Limitrr's get IP middleware function
    return $response->getBody()->write("Hello, ${name}. Your IP is ${ip}.");
});

//You do not have to app the middleware function to every single route, globally.
//You can do it indivually, too - along with passing options into such. Like so:
$app->get("/createUser/{name}", function ($request, $response, $args) {
    //Non intensive actions like simple verification will have a different limit to intensive ones.
    //and will only be measured in terms of each request via the middleware.
    //No further action is required.
    if (strlen($args["name"]) < 5) {
        //Dummy function creating user
        $res = $someRandomClass->registerUser();
        if ($res) {
            //Intensive actions like actually registering a user should have a
            //different limit to normal requests, hence the completedActionsPerExpiry option.
            //and should only be added to once this task has been completed fully
            //In this example, we will be limiting the amount of completed actions a certain IP can make.
            //Anything can be passed in here, however. For example, a email address or user ID.
            //$request->getAttribute('realip') was determined by calling the middleware earlier - getIpMiddleware()
            $limitrr->complete(["discriminator"] => $ip);
        }
    }
})->add(new \eddiejibson\limitrr\RateLimitMiddleware($limitrr, ["route"=>"createUser"]));
//You can also pass the route name within the limitrr middleware function

$app->run();

Obter valor de uma determinada chave

limitrr->get()

Retorna: Array

root@kitploit:~
$limitrr->get([
    "discriminator" => $discriminator, //Required
    "route" => $route, //Not required, default is assumed
    "type" => $type //Not required
]);
Parâmetros de ->get()

Devem ser passados para a função através de um array

  • discriminator: Obrigatório Onde discriminator é a coisa sendo limitada (ex.: x quantidade de ações concluídas por discriminador)
  • route: String De qual rota os valores devem ser recuperados? Se não for definido, irá obter as contagens da rota default
  • type: String Em vez de recuperar ambos os valores, você pode especificar requests ou completed nesta chave e apenas esse valor será retornado como um inteiro.
Exemplos de ->get()
root@kitploit:~
$limitrr->get([
    "discriminator" => $discriminator,
    "type" => $type,
    "route" => $route
]); //Besides discriminator, all parameters are optional.
//If type is not passed into the function, it will
//return both the amount of requests and completed actions

//Where discriminator is the thing being limited
//e.g x amount of completed actions/requests per discriminator
$limitrr->get(["discriminator" => $discriminator]);

//This tends to be the user's IP.
$limitrr->get(["discriminator" => $ip]);
//This will return both the amount of requests and completed actions stored under the
//discriminator provided in an object. You can handle like this:
$result = $limitrr->get(["discriminator" => $ip]);
echo $result["requests"] + " Requests";
echo $result["completed"] + " Completed";

//The above example would get the request and completed task count from the default
//route. If you would like to retrieve values from a different route, you can specify
//this as well. It can be done like this:
$result = $limitrr->get(["discriminator" => $ip, "route" => "exampleRouteName"]);
echo $result["requests"] . " Requests made through the route exampleRouteName";
echo $result["completed"] . " Completed Tasks made through the route exampleRouteName";

//You may also only fetch only one type of value - instead of both requests and completed.
$result = $limitrr->get(["discriminator" => $ip, "route" => "exampleRouteName", "type" => "completed"]);
echo $result["completed"] . " Completed tasks made through the route exampleRouteName";

Completar contagem de ação/tarefa

limitrr->complete()

Retorna: Integer

root@kitploit:~
$limitrr->get([
    "discriminator" => $discriminator, //Required
    "route" => $route, //Not required, default is assumed
]);
Parâmetros de ->complete()

Devem ser passados para a função através de um array

  • discriminator: Obrigatório Onde discriminator é a coisa sendo limitada (ex.: x quantidade de ações concluídas por discriminador)
  • route: String Em qual rota os valores devem ser inseridos? Se não for definido, irá inserir as contagens na rota default

Remoção de valores de determinadas chaves de requisição/ação concluída

limitrr->reset()

Retorna: Boolean

root@kitploit:~
$limitrr->reset([
    "discriminator" => $discriminator, //Required
    "route" => $route, //Not required, default is assumed,
    "type" => $type //Not required
]);
Parâmetros de ->reset()

Devem ser passados para a função através de um array

  • discriminator: Obrigatório Onde discriminator é a coisa sendo limitada (ex.: x quantidade de ações concluídas por discriminador)
  • route: String De qual rota os valores devem ser redefinidos? Se não for definido, irá redefinir as contagens da rota default
  • type: String Qual contagem você deseja redefinir? requests ou completed? Se não for definido, ambos serão removidos.
root@kitploit:~
//Where discriminator is the thing being limited
//e.g x amount of completed actions/requests per discriminator
//This will remove both the amount of requests and completed action count
$limitrr->reset(["discriminator" => $discriminator]);

//This tends to be the user's IP.
$limitrr->reset(["discriminator" => $ip]);

//If you wish to reset counts from a particular route, this can be done as well.
//As the type is not specified, it will remove both the request and completed count
$result = $limitrr->reset([
    "discriminator" => $ip,
    "route" => "exampleRouteName"
]);
if ($result) {
    echo "Requests removed from the route exampleRouteName";
} else {
    //Do something else
}

//If you want to remove either one of the amount of requests or completed actions.
//but not the other, this can be done as well.
//The value passed in can either be "requests" or "completed".
//In this example, we will be removing the request count for a certain IP
$result = $limitrr->reset([
    "discriminator" => $ip,
    "type" => "requests"
]);
if ($result) {
    echo "Request count for the specified IP were removed"
} else {
    //do something else
}

Configuração

redis

Obrigatório: false

Tipo: Array OU String

Descrição: Informações de conexão com Redis.

Passe uma string contendo a URI da instância Redis ou um objeto contendo as informações de conexão:

  • port: Integer Porta do Redis. Padrão: 6379
  • host: String Hostname do Redis. Padrão: "127.0.0.1"
  • password: String Senha do Redis. Padrão: ""
  • database: Integer Banco de dados Redis. Padrão: 0

Exemplo do array/string redis que pode ser passado para o Limitrr

root@kitploit:~
    //Pass in a string containing a redis URI.
    "redis" => "redis://127.0.0.1:6379/0"
    //Alternatively, use an array with the connection information.
    "redis" => [
        "port" => 6379, //Redis Port. Required: false. Defaults to 6379
        "host" => "127.0.0.1", //Redis hostname. required: False. Defaults to "127.0.0.1".
        "password" => "mysecretpassword1234", //Redis password. Required: false. Defaults to null.
        "database" => 0 //Redis database. Required: false. Defaults to 0.
    ]

options

Obrigatório: false

Tipo: Array

Descrição: Várias opções relacionadas ao Limitrr.

  • keyName: String O nome da chave sob a qual todas as requisições serão armazenadas. Isso é principalmente para fins estéticos e não afeta muito. No entanto, deve ser alterado em cada inicialização da classe principal para evitar conflitos. Padrão: "limitrr"
  • errorStatusCode: Integer Código de status retornado quando o usuário está sendo limitado por taxa. Padrão: 429 (Too Many Requests)

Exemplo do objeto options que pode ser passado para o Limitrr

root@kitploit:~
"options" => [
    "keyName" => "myApp", //The keyname all of the requests will be stored under. Required: false. Defaults to "limitrr"
    "errorStatusCode" => 429 //Should important errors such as failure to connect to the Redis keystore be caught and displayed?
]

routes

Obrigatório: false

Tipo: Array

Descrição: Defina restrições de rota.

Dentro do objeto routes, você pode definir várias rotas separadas e definir regras personalizadas dentro delas. As regras personalizadas que você pode definir são:

  • requestsPerExpiry: Integer Quantas requisições podem ser aceitas até que o usuário seja limitado por taxa? Padrão: 100
  • completedActionsPerExpiry: Integer Quantas ações concluídas podem ser aceitas até que o usuário seja limitado por taxa? Isso é útil para certas ações como registrar um usuário – eles podem ter uma certa quantidade de requisições, mas uma quantidade diferente (obviamente menor) de "ações concluídas". Portanto, se usuários foram recentemente registrados com sucesso várias vezes sob o mesmo IP (ou outro discriminador), eles podem ser limitados por taxa. Eles podem ter permissão para 100 requisições por certo período de expiração para validação geral e afins, mas apenas uma pequena fração disso para procedimentos intensivos. Padrão: o valor em requestsPerExpiry ou 5 se não definido.
  • expiry: Integer Por quanto tempo as requisições devem ser armazenadas (em segundos) antes de serem redefinidas para 0? Se definido como -1, os valores nunca expirarão e permanecerão assim indefinidamente ou devem ser removidos manualmente. Padrão: 900 (15 minutos)
  • completedExpiry: Integer Por quanto tempo as "ações concluídas" (como a quantidade de usuários registrados a partir de um IP específico ou outro discriminador) devem ser armazenadas (em segundos) antes de serem redefinidas para 0? Se definido como -1, esses valores nunca expirarão e permanecerão assim indefinidamente ou devem ser removidos manualmente. Padrão: o valor em expiry ou 900 (15 minutos) se não definido.
  • errorMsgs: Object Mensagens de erro separadas para muitas requisições e muitas ações concluídas. Elas receberam os respectivos nomes de chave "requests" e "completed". Isso será retornado ao usuário quando ele estiver sendo limitado por taxa. Se nenhuma string foi definida em , será usada a string padrão . Além disso, se um valor não foi definido em , será resolvido para a string encontrada em . Ou, se essa também não foi definida, será seu valor.

Exemplo do array routes

root@kitploit:~
"routes" => [
    //Overwrite default route rules - not all of the keys must be set,
    //only the ones you wish to overwrite
    "default" => [
        "expiry": 1000
    ],
    "exampleRoute" => [
        "requestsPerExpiry" => 100,
        "completedActionsPerExpiry" => 5,
        "expiry" => 900,
        "completedExpiry" => 900,
        "errorMsgs" => [
            "requests" => "As you have made too many requests, you are being rate limited.",
            "completed" => "As you performed too many successful actions, you have been rate limited."
        ]
    ],
    //If not all keys are set, they will revert to
    //the default values
    "exampleRoute2" => [
        "requestsPerExpiry" => 500
    ]
]
Baixar ferramenta
requests
"As you have made too many requests, you are being rate limited."
completed
requests
"As you performed too many successful actions, you have been rate limited."