Pular para conteúdo

js-challenge: Módulo de desafio Javascript do NGINX

Instalação

Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:

  • RedHat Enterprise Linux 7, 8, 9 e 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 e Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-js-challenge
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-js-challenge

Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:

load_module modules/ngx_http_js_challenge_module.so;

Este documento descreve o nginx-module-js-challenge v0.0.2 lançado em 21 de agosto de 2024.

Uma solicitação para uma versão estável existe. Vote aqui.


ngx_http_js_challenge_module

GitHub CodeFactor

Site de demonstração

Acesso simples baseado em prova de trabalho em javascript para NGINX com praticamente nenhuma sobrecarga.

Instalação fácil: basta adicionar load_module /path/to/ngx_http_js_challenge_module.so; ao seu arquivo nginx.conf e seguir as instruções de configuração.

Configuração

Configuração simples

server {
    js_challenge on;
    js_challenge_secret "mude-me!";

    # ...
}

Configuração avançada

server {
    js_challenge on;
    js_challenge_secret "mude-me!";
    js_challenge_html /path/to/body.html;
    js_challenge_bucket_duration 3600;
    js_challenge_title "Verificando seu navegador...";

    location /static {
        js_challenge off;
        alias /static_files/;
    }

    location /sensitive {
        js_challenge_bucket_duration 600;
        #...
    }

    #...
}

  • js_challenge on|off Ativa ou desativa desafios em javascript para este bloco de configuração
  • js_challenge_secret "secret" Segredo para gerar os desafios. PADRÃO: "changeme"
  • js_challenge_html "/path/to/file.html" Caminho para o arquivo html a ser inserido na tag <body> da página intersticial
  • js_challenge_title "title" Será inserido na tag <title> da página intersticial. PADRÃO: "Verificando seu navegador..."
  • js_challenge_bucket_duration time Intervalo para solicitar o desafio em js, em segundos. PADRÃO: 3600

Limitações conhecidas / TODO

  • Usuários com cookies desativados ficarão presos em um loop de atualização infinito (TODO: redirecionar com um parâmetro de consulta conhecido, se nenhum cookie for especificado, mas o argumento de consulta estiver definido, exibir uma página de erro)
  • Se o NGINX estiver atrás de um proxy reverso/balancer de carga, o mesmo desafio será enviado a diferentes usuários e/ou o cookie de resposta será invalidado quando o usuário for redirecionado para outro servidor. (TODO: usar o cabeçalho x-real-ip quando disponível)

GitHub

Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-js-challenge.