L' nonceattributo ti consente di "whitelist" alcuni inline scripted styleelementi, evitando al contempo l'uso della unsafe-inlinedirettiva CSP (che consentirebbe tutto inline script/ style), in modo da mantenere comunque la funzione CSP chiave di non consentire inline script/ stylein generale.
Quindi l' nonceattributo è un modo per dire ai browser che i contenuti incorporati di un particolare script o elemento di stile non sono stati iniettati nel documento da una terza parte (dannosa), ma sono stati invece inseriti nel documento intenzionalmente da chiunque controlli il server che il documento viene servito a partire dal.
https://developers.google.com/web/fundamentals/security/csp/#if_you_absolutely_must_use_it fornisce un buon esempio di come utilizzare l' nonceattributo, che equivale ai seguenti passaggi:
Per ogni richiesta ricevuta dal tuo server Web per un particolare documento, fai in modo che il tuo back-end generi una stringa casuale codificata in base64 di almeno 128 bit di dati da un generatore di numeri casuali crittograficamente sicuro; ad es EDNnf03nceIOfn39fn3e9h3sdfa. Questo è il tuo nonce.
Prendi il nonce generato nel passaggio 1 e, per qualsiasi inline script/ styleche desideri "inserire noncenella whitelist", fai in modo che il tuo codice backend inserisca un attributo nel documento prima che venga inviato via cavo, con quel nonce come valore:
<script nonce="EDNnf03nceIOfn39fn3e9h3sdfa">…</script>
Prendi il nonce generato nel passaggio 1, antepone nonce-ad esso e fai in modo che il tuo backend generi un'intestazione CSP con quella tra i valori dell'elenco di origine per script-srco style-src:
Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'
Quindi il meccanismo di utilizzo di un nonce è un'alternativa al fatto che il tuo back-end generi un hash del contenuto dell'inline scripto styleche desideri consentire, e quindi specifica tale hash nell'elenco di sorgenti appropriato nella tua intestazione CSP.
Si noti che poiché i browser non (non possono) verificare che il valore nonce inviato cambi tra le richieste di pagina, è possibile, sebbene totalmente sconsigliabile, saltare 1 sopra e non fare in modo che il back-end faccia qualcosa in modo dinamico per il nonce, nel qual caso potrebbe semplicemente inserire un nonceattributo con un valore statico nell'origine HTML del tuo documento e inviare un'intestazione CSP statica con lo stesso valore nonce.
Ma il motivo per cui non vorresti usare un nonce statico in quel modo è che praticamente sconfiggerebbe l'intero scopo di usare il nonce per cominciare, perché, se dovessi usare un nonce statico come quello, a quel punto potresti anche usare unsafe-inline.