Перейти к содержанию

xss: Поддержка кросс-сайтового скриптинга в NGINX

Установка для Debian/Ubuntu

Эти документы применимы к пакету APT nginx-module-xss, предоставляемому репозиторием GetPageSpeed Extras.

  1. Настройте репозиторий APT, как описано в настройке репозитория APT.
  2. Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-xss
Показать дистрибутивы и архитектуры
| Дистрибутив | Версия            | Компонент  | Архитектуры   |
|-------------|-------------------|------------|----------------|
| debian      | bookworm          | main       | amd64, arm64   |
| debian      | bookworm-mainline | main       | amd64, arm64   |
| debian      | trixie            | main       | amd64, arm64   |
| debian      | trixie-mainline   | main       | amd64, arm64   |
| ubuntu      | focal             | main       | amd64, arm64   |
| ubuntu      | focal-mainline    | main       | amd64, arm64   |
| ubuntu      | jammy             | main       | amd64, arm64   |
| ubuntu      | jammy-mainline    | main       | amd64, arm64   |
| ubuntu      | noble             | main       | amd64, arm64   |
| ubuntu      | noble-mainline    | main       | amd64, arm64   |

xss-nginx-module - Поддержка кросс-сайтового скриптинга в nginx

Обзор

## доступ к /foo?callback=process дает ответ
## тело "process(...);" (без кавычек), где "..."
## это оригинальное тело ответа для локации /foo.
server {
    location /foo {
        # ваш обработчик контента здесь...

        xss_get on;
        xss_callback_arg 'callback';
        xss_input_types 'application/json'; # по умолчанию
        xss_output_type 'application/x-javascript'; # по умолчанию
    }
    ...
}

Описание

Этот модуль добавляет поддержку кросс-сайтового AJAX для nginx. В настоящее время поддерживается только кросс-сайтовый GET. В будущем будет добавлен кросс-сайтовый POST.

Кросс-сайтовый GET в настоящее время реализован как JSONP (или "JSON с заполнением"). См. http://en.wikipedia.org/wiki/JSON#JSONP для получения дополнительной информации.

Директивы

xss_get

синтаксис: xss_get on | off

по умолчанию: xss_get off

контекст: http, server, location, if location

Включает поддержку JSONP для GET-запросов.

xss_callback_arg

синтаксис: xss_callback_arg <name>

по умолчанию: нет

контекст: http, http, location, if location

Указывает имя функции обратного вызова JavaScript, используемой в ответах.

Например,

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

тогда

GET /foo?c=blah

возвращает

blah(...);

xss_override_status

синтаксис: xss_override_status on | off

по умолчанию: xss_check_status on

контекст: http, server, location, if location

Указывает, следует ли заменять статус 30x, 40x и 50x на 200, когда ответ действительно обрабатывается.

xss_check_status

синтаксис: xss_check_status on | off

по умолчанию: xss_check_status on

контекст: http, server, location, if location

По умолчанию ngx_xss обрабатывает только ответы со статусом 200 или 201.

xss_input_types

синтаксис: xss_input_types [mime-type]...

по умолчанию: xss_input_types application/json

контекст: http, server, location, if location

Обрабатывает только ответы указанных типов MIME.

Пример:

xss_input_types application/json text/plain;

Ограничения

  • ngx_xss не будет работать с интерфейсами подзапросов ngx_echo из-за ограничений, накладываемых механизмом "отложенной цепи" подзапросов в ядре nginx. Стандартный модуль ngx_addition также попадает в эту категорию. Однако рекомендуется использовать ngx_lua в качестве обработчика контента для выполнения подзапросов и ngx_xss для выполнения JSONP, поскольку интерфейс ngx.location.capture() ngx_lua не использует механизм "отложенной цепи", выходя за пределы этого ограничения. Мы применяем этот подход в продакшене, и он отлично работает.

Устранение неполадок

Используйте уровень ведения журнала ошибок "info" (или ниже), чтобы получить больше диагностических данных, когда что-то идет не так.

См. также