Saltar a contenido

js-challenge: Módulo de desafío Javascript de NGINX

Instalación

Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:

  • RedHat Enterprise Linux 7, 8, 9 y 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 y 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

Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:

load_module modules/ngx_http_js_challenge_module.so;

Este documento describe nginx-module-js-challenge v0.0.2 lanzado el 21 de agosto de 2024.

Existe una solicitud para una versión estable. Vota aquí.


ngx_http_js_challenge_module

GitHub CodeFactor

Demo website

Acceso simple basado en prueba de trabajo Javascript para Nginx con prácticamente ningún overhead.

Instalación fácil: solo agrega load_module /path/to/ngx_http_js_challenge_module.so; a tu archivo nginx.conf y sigue las instrucciones de configuración.

Configuración

Configuración simple

server {
    js_challenge on;
    js_challenge_secret "¡cámbiame!";

    # ...
}

Configuración avanzada

server {
    js_challenge on;
    js_challenge_secret "¡cámbiame!";
    js_challenge_html /path/to/body.html;
    js_challenge_bucket_duration 3600;
    js_challenge_title "Verificando tu navegador...";

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

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

    #...
}

  • js_challenge on|off Alternar desafíos javascript para este bloque de configuración
  • js_challenge_secret "secret" Secreto para generar los desafíos. DEFAULT: "changeme"
  • js_challenge_html "/path/to/file.html" Ruta al archivo html que se insertará en la etiqueta <body> de la página intersticial
  • js_challenge_title "title" Se insertará en la etiqueta <title> de la página intersticial. DEFAULT: "Verificando tu navegador..."
  • js_challenge_bucket_duration time Intervalo para solicitar el desafío js, en segundos. DEFAULT: 3600

Limitaciones conocidas / TODO

  • Los usuarios con cookies deshabilitadas quedarán atrapados en un bucle de refresco infinito (TODO: redirigir con un parámetro de consulta conocido, si no se especifica cookie pero se establece el argumento de consulta, mostrar una página de error)
  • Si nginx está detrás de un proxy inverso/balancer de carga, el mismo desafío se enviará a diferentes usuarios y/o la cookie de respuesta se invalidará cuando el usuario sea redirigido a otro servidor. (TODO: usar el encabezado x-real-ip cuando esté disponible)

GitHub

Puedes encontrar consejos adicionales de configuración y documentación para este módulo en el repositorio de GitHub para nginx-module-js-challenge.