Какой метод лучше всего подходит для CSP nonce в Nginx?
Я хочу создать одноразовый серверный CSP для моего сайта
мой веб-сервер Nginx
Я написал два метода для тех,
А) использование директивы в Nginx с set-misc-nginx-module
set_secure_random_alphanum $cspNonce 32;
add_header Content-Security-Policy "base-uri 'self'; default-src 'self' 'unsafe-inline' https://www.google-analytics.com ; script-src 'unsafe-inline' https://www.googletagmanager.com https://www.google-analytics.com/ https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/ 'strict-dynamic' 'nonce-$cspNonce' ; style-src 'unsafe-inline' https://www.googletagmanager.com https://fonts.googleapis.com/ https://www.google.com/recaptcha/ 'strict-dynamic' 'nonce-$cspNonce' ; img-src 'unsafe-inline' https://ssl.gstatic.com/ example.com/images/ https://stats.g.doubleclick.net https://www.google-analytics.com/ ; frame-src example.com/phoenix/live_reload/frame https://www.gstatic.com/ https://www.google.com/ https://www.googletagmanager.com/ns.html ; font-src 'self' https://example.com/fonts/ https://fonts.gstatic.com ; connect-src www.google-analytics.com https://www.google-analytics.com https://stats.g.doubleclick.net ; object-src 'none';" always;
sub_filter_once off;
sub_filter_types *;
sub_filter CSP_NONCE $cspNonce;
и в моем коде приложения у меня вот так:
<script nonce="CSP_NONCE">...</script>
Б) использование Lua в Nginx
location / {
[...]
set_by_lua_block $cspNonce {
local basexx = require('basexx')
local file = assert(io.open('/dev/urandom', 'rb'))
local bytes = file:read(32)
file:close()
return basexx.to_base64(bytes)
}
[...]
}
set_secure_random_alphanum $cspNonce 32;
add_header Content-Security-Policy "base-uri 'self'; default-src 'self' 'unsafe-inline' https://www.google-analytics.com ; script-src 'unsafe-inline' https://www.googletagmanager.com https://www.google-analytics.com/ https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/ 'strict-dynamic' 'nonce-$cspNonce' ; style-src 'unsafe-inline' https://www.googletagmanager.com https://fonts.googleapis.com/ https://www.google.com/recaptcha/ 'strict-dynamic' 'nonce-$cspNonce' ; img-src 'unsafe-inline' https://ssl.gstatic.com/ example.com/images/ https://stats.g.doubleclick.net https://www.google-analytics.com/ ; frame-src example.com/phoenix/live_reload/frame https://www.gstatic.com/ https://www.google.com/ https://www.googletagmanager.com/ns.html ; font-src 'self' https://example.com/fonts/ https://fonts.gstatic.com ; connect-src www.google-analytics.com https://www.google-analytics.com https://stats.g.doubleclick.net ; object-src 'none';" always;
sub_filter_once off;
sub_filter_types text/html;
sub_filter_last_modified on;
sub_filter '<script' '<script nonce="$cspNonce"';
sub_filter '<style' '<style nonce="$cspNonce"';
мой приоритет - безопасность и производительность, какой из них лучше?