Aller au contenu

js-challenge: Module de défi Javascript NGINX

Installation

Vous pouvez installer ce module dans n'importe quelle distribution basée sur RHEL, y compris, mais sans s'y limiter :

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

Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :

load_module modules/ngx_http_js_challenge_module.so;

Ce document décrit nginx-module-js-challenge v0.0.2 publié le 21 août 2024.

Une demande pour une version stable existe. Votez ici.


ngx_http_js_challenge_module

GitHub CodeFactor

Site de démonstration

Accès simple basé sur une preuve de travail Javascript pour Nginx avec pratiquement aucun surcoût.

Installation facile : ajoutez simplement load_module /path/to/ngx_http_js_challenge_module.so; à votre fichier nginx.conf et suivez les instructions de configuration.

Configuration

Configuration simple

server {
    js_challenge on;
    js_challenge_secret "change me!";

    # ...
}

Configuration avancée

server {
    js_challenge on;
    js_challenge_secret "change me!";
    js_challenge_html /path/to/body.html;
    js_challenge_bucket_duration 3600;
    js_challenge_title "Vérification de votre navigateur...";

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

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

    #...
}

  • js_challenge on|off Active ou désactive les défis Javascript pour ce bloc de configuration
  • js_challenge_secret "secret" Secret pour générer les défis. PAR DÉFAUT : "changeme"
  • js_challenge_html "/path/to/file.html" Chemin vers le fichier html à insérer dans la balise <body> de la page intermédiaire
  • js_challenge_title "title" Sera inséré dans la balise <title> de la page intermédiaire. PAR DÉFAUT : "Vérification de votre navigateur..."
  • js_challenge_bucket_duration time Intervalle pour proposer le défi js, en secondes. PAR DÉFAUT : 3600

Limitations connues / À faire

  • Les utilisateurs avec les cookies désactivés seront bloqués dans une boucle de rafraîchissement infinie (À faire : rediriger avec un paramètre de requête connu, si aucun cookie n'est spécifié mais que l'argument de requête est défini, afficher une page d'erreur)
  • Si nginx est derrière un proxy inverse/un répartiteur de charge, le même défi sera envoyé à différents utilisateurs et/ou le cookie de réponse sera invalidé lorsque l'utilisateur sera redirigé vers un autre serveur. (À faire : utiliser l'en-tête x-real-ip lorsque disponible)

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-js-challenge.