Какой метод лучше всего подходит для 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"';

мой приоритет - безопасность и производительность, какой из них лучше?

0 ответов

Другие вопросы по тегам