xss: Поддержка кросс-сайтового скриптинга в NGINX
Установка для Debian/Ubuntu
Эти документы применимы к пакету APT nginx-module-xss, предоставляемому репозиторием GetPageSpeed Extras.
- Настройте репозиторий APT, как описано в настройке репозитория APT.
- Установите модуль:
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" (или ниже), чтобы получить больше диагностических данных, когда что-то идет не так.