19.5 C
Brasília
segunda-feira, dezembro 23, 2024

Novidades na versão 2.19: Filtro de inundação de extensão


Com o lançamento de Servidor SmartFox 2.19.0 introduzimos um novo Filtro de inundação de extensão que fornece controle detalhado sobre a taxa de pacotes de solicitações de extensão: pode ser usado para limitar o número de chamadas por segundo para solicitações específicas e definir automaticamente regras para alertar e banir o(s) cliente(s) infrator(es).

Inclui também a capacidade de capturar chamadas de extensão desconhecidas (ou seja, solicitações para as quais não existe um manipulador de solicitações) e aplicar também regras de banimento automático.

Em circunstâncias normais, por exemplo, usuários jogando com o aplicativo cliente oficial, não deve haver preocupação com spam de solicitação: limitações podem ser facilmente codificadas no próprio cliente. No entanto, também é relativamente fácil para usuários maliciosos fazer engenharia reversa em um cliente feito em Javascript, Unity ou Java e contornar tais limitações.

Visão geral

No diagrama abaixo, mostramos uma visão panorâmica do filtro e sua posição na cadeia de invocação da extensão. Para cada manipulador de solicitação definido em nosso código de extensão (por meio do adicionarManipulador de Solicitação métodos) podemos definir um limite expresso em número de chamadas por segundo.

Novidades na versão 2.19: Filtro de inundação de extensão

Neste exemplo definimos um jogadorAtirar manipulador de solicitação e também definimos um limite de 4 solicitações/seg. Se um cliente enviar 20 chamadas em apenas um segundo, os primeiros 4 serão passados ​​para a Extensão e processado, enquanto o restante será descartado. Além disso, com base nas regras de auto-ban, o remetente será avisado ou banido.

Uso

O filtro de inundação de extensão é inativo por padrão. Para ativá-lo precisamos chamar o initFloodFilter(…) método disponível na matriz Extensão SFS aula.

public class AntiFloodTestExtension extends SFSExtension
{
    static remaining String PLAYER_SHOOT = "pShoot";
    static remaining String PLAYER_MOVE = "pMove";
 
    @Override
    public void init()
    {
        ExtensionFloodFilterConfig cfg = new ExtensionFloodFilterConfig();
        cfg.banDurationMinutes = 120;
        cfg.maxFloodingAttempts = 3;
        cfg.secondsBeforeBan = 2;
        cfg.banMessage = "You at the moment are banned. Cause: request flooding.";
        cfg.filterRules = Map.of
                        (
                            PLAYER_SHOOT, 4, 
                            PLAYER_MOVE, 15
                        );
     
        initFloodFilter(cfg);
     
        addRequestHandler(PLAYER_SHOOT, (sender, param) -> {
         
            hint("Taking pictures");
     
        });
     
        addRequestHandler(PLAYER_MOVE, (sender, param) -> {
         
            hint("Transferring");
     
        });
    }
}

O método inicializador leva um ExtensionFloodFilterConfig objeto com diversas propriedades para alertar e banir clientes.

Para mais detalhes sobre cada configuração, valores padrão e mais detalhes, consulte nosso website de documentação aqui.

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Stay Connected

0FansLike
0FollowersFollow
0SubscribersSubscribe
- Advertisement -spot_img

Latest Articles