Назад | Перейти на главную страницу

Это хорошая идея использовать nginx $ request_id для значения CSP nonce?

Установить строго-динамический источник CSP требуется поддерживать уникальное значение nonce для каждого запроса. Рекомендуемый способ сделать это согласно Эта статья это с:

set_secure_random_alphanum $ cspNonce 32;

Хотя я использую официальный образ докера nginx, в котором не установлен модуль nginx_set_misc, и эта строка не работает с ошибкой:

nginx: [Emerg] неизвестная директива "set_secure_random_alphanum" в /etc/nginx/security-headers-master.conf:54

У меня есть два варианта:

- установить не официальный образ nginx с поддержкой lua,

- использовать доступную переменную nginx, например $ request_id, как значение nonce.

Насколько я понимаю, согласно документации nginx, он может поместиться:

$ request_id - уникальный идентификатор запроса, сформированный из 16 случайных байтов, в шестнадцатеричном формате (1.11.0)

Поделитесь, пожалуйста, своими мыслями по этому поводу.

Если вы компилируете nginx с NGX_OPENSSL флаг, $request_id будет достаточно для одноразового номера CSP, потому что это 128-битное криптостойкое случайное число возвращено OpenSSL RAND_bytes(). В противном случае значение будет псевдослучайным, что означает, что злоумышленник, который выводит состояние PRNG вашего сервера, может подделать правильный nonce request_id / CSP в свои полезные данные XSS. На практике я бы не стал особо беспокоиться об этом, потому что атака непростая и потребует отправки большого объема трафика на сервер, но об этом стоит помнить.

Одна вещь, на которую следует обратить внимание, - это убедиться, что значение request_id не используется ни для чего другого, что может быть чувствительным в вашем приложении, потому что вы будете открывать его пользователю в источнике HTML-страницы.