xss: Нативная поддержка межсайтового скриптинга в NGINX
Установка
Вы можете установить этот модуль в любой дистрибутив на базе RHEL, включая, но не ограничиваясь:
- RedHat Enterprise Linux 7, 8, 9 и 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 и 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
Включите модуль, добавив следующее в начало файла /etc/nginx/nginx.conf:
load_module modules/ngx_http_xss_filter_module.so;
Этот документ описывает nginx-module-xss v0.6, выпущенный 26 декабря 2022 года.
## доступ к /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>
по умолчанию: none
контекст: 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" (или ниже), чтобы получить больше диагностической информации, когда что-то идет не так.
См. также
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-xss.