Aller au contenu

xss: Support natif du cross-site scripting dans 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-xss
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-xss

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

load_module modules/ngx_http_xss_filter_module.so;

Ce document décrit nginx-module-xss v0.6 publié le 26 décembre 2022.


## accessing /foo?callback=process gives the response
## body "process(...);" (without quotes) where "..."
## is the original response body of the /foo location.
server {
    location /foo {
        # votre gestionnaire de contenu ici...

        xss_get on;
        xss_callback_arg 'callback';
        xss_input_types 'application/json'; # par défaut
        xss_output_type 'application/x-javascript'; # par défaut
    }
    ...
}

Description

Ce module ajoute un support AJAX cross-site à nginx. Actuellement, seul le GET cross-site est pris en charge. Mais le POST cross-site sera ajouté dans le futur.

Le GET cross-site est actuellement implémenté comme JSONP (ou "JSON avec remplissage"). Voir http://en.wikipedia.org/wiki/JSON#JSONP pour plus de détails.

Directives

xss_get

syntax: xss_get on | off

default: xss_get off

context: http, server, location, if location

Active le support JSONP pour les requêtes GET.

xss_callback_arg

syntax: xss_callback_arg <name>

default: aucun

context: http, http, location, if location

Spécifie le nom de la fonction de rappel JavaScript utilisé dans les réponses.

Par exemple,

location /foo {
    xss_get on;
    xss_callback_arg c;
    ...
}

alors

GET /foo?c=blah

retourne

blah(...);

xss_override_status

syntax: xss_override_status on | off

default: xss_check_status on

context: http, server, location, if location

Spécifie s'il faut remplacer les statuts 30x, 40x et 50x par 200 lorsque la réponse est effectivement en cours de traitement.

xss_check_status

syntax: xss_check_status on | off

default: xss_check_status on

context: http, server, location, if location

Par défaut, ngx_xss ne traite que les réponses avec le code de statut 200 ou 201.

xss_input_types

syntax: xss_input_types [mime-type]...

default: xss_input_types application/json

context: http, server, location, if location

Ne traite que les réponses des types MIME spécifiés.

Exemple :

xss_input_types application/json text/plain;

Limitations

  • ngx_xss ne fonctionnera pas avec les interfaces de sous-requête de ngx_echo, en raison des limitations sous-jacentes imposées par le mécanisme de "chaîne reportée" des sous-requêtes dans le noyau nginx. Le module standard ngx_addition tombe également dans cette catégorie. Cependant, il est recommandé d'utiliser ngx_lua comme gestionnaire de contenu pour émettre des sous-requêtes et ngx_xss pour faire du JSONP, car l'interface ngx.location.capture() de ngx_lua n'utilise pas le mécanisme de "chaîne reportée", ce qui permet de contourner cette limitation. Nous adoptons cette approche en production et cela fonctionne très bien.

Dépannage

Utilisez le niveau de journal d'erreur "info" (ou inférieur) pour obtenir plus de diagnostics lorsque les choses ne vont pas.

Voir aussi

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-xss.