Saltar a contenido

xss: Soporte nativo para scripting entre sitios en 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-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

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

load_module modules/ngx_http_xss_filter_module.so;

Este documento describe nginx-module-xss v0.6 lanzado el 26 de diciembre de 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 {
        # your content handler goes here...

        xss_get on;
        xss_callback_arg 'callback';
        xss_input_types 'application/json'; # default
        xss_output_type 'application/x-javascript'; # default
    }
    ...
}

Descripción

Este módulo añade soporte AJAX entre sitios a nginx. Actualmente solo se soporta GET entre sitios. Pero se añadirá soporte para POST entre sitios en el futuro.

El GET entre sitios se implementa actualmente como JSONP (o "JSON con relleno"). Consulta http://en.wikipedia.org/wiki/JSON#JSONP para más detalles.

Directivas

xss_get

sintaxis: xss_get on | off

predeterminado: xss_get off

contexto: http, server, location, if location

Habilita el soporte JSONP para solicitudes GET.

xss_callback_arg

sintaxis: xss_callback_arg <nombre>

predeterminado: ninguno

contexto: http, server, location, if location

Especifica el nombre de la función de callback de JavaScript utilizada en las respuestas.

Por ejemplo,

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

entonces

GET /foo?c=blah

devuelve

blah(...);

xss_override_status

sintaxis: xss_override_status on | off

predeterminado: xss_check_status on

contexto: http, server, location, if location

Especifica si se debe sobrescribir el estado 30x, 40x y 50x a 200 cuando la respuesta está siendo procesada.

xss_check_status

sintaxis: xss_check_status on | off

predeterminado: xss_check_status on

contexto: http, server, location, if location

Por defecto, ngx_xss solo procesa respuestas con el código de estado 200 o 201.

xss_input_types

sintaxis: xss_input_types [mime-type]...

predeterminado: xss_input_types application/json

contexto: http, server, location, if location

Solo procesa las respuestas de los tipos MIME especificados.

Ejemplo:

xss_input_types application/json text/plain;

Limitaciones

  • ngx_xss no funcionará con las interfaces de subsolicitud de ngx_echo, debido a las limitaciones subyacentes impuestas por el mecanismo de "cadena pospuesta" de las subsolicitudes en el núcleo de nginx. El módulo estándar ngx_addition también cae en esta categoría. Se recomienda, sin embargo, usar ngx_lua como el manejador de contenido para emitir subsolicitudes y ngx_xss para hacer JSONP, porque la interfaz ngx.location.capture() de ngx_lua no utiliza el mecanismo de "cadena pospuesta", saliendo así de esta limitación. Estamos tomando este enfoque en producción y funciona muy bien.

Solución de Problemas

Utiliza el nivel de registro de errores "info" (o inferior) para obtener más diagnósticos cuando las cosas salen mal.

Véase También

GitHub

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