Установить строго-динамический источник 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-страницы.