nonceAtrybut pozwala na „białej listy” pewne inline scripti styleelementów, unikając korzystania z CSP unsafe-inlinedyrektywy (która pozwoliłaby wszystko inline script/ style), dzięki czemu wciąż zachowują kluczową cechę CSP w postaci zablokowania inline script/ stylew ogóle.
Więc nonceatrybutem jest sposób mówienia przeglądarek że inline zawartość danego skryptu lub elementu stylu nie wstrzykiwano do dokumentu przez niektórych (szkodliwego) osoby trzeciej, ale były zamiast umieścić w dokumencie celowo przez tego, kto kontroluje serwer dokument jest serwowane z.
https://developers.google.com/web/fundamentals/security/csp/#if_you_absolutely_must_use_it podaje dobry przykład użycia nonceatrybutu, co sprowadza się do następujących kroków:
Dla każdego żądania, które Twój serwer WWW otrzyma dla określonego dokumentu, poproś zaplecze o wygenerowanie losowego ciągu co najmniej 128 bitów danych zakodowanych w base64 z szyfrowanego kryptograficznie generatora liczb losowych; np EDNnf03nceIOfn39fn3e9h3sdfa. To twoja nonce.
Weź numer nonce wygenerowany w kroku 1 i dla każdego elementu inline script/, stylektóry chcesz nonceumieścić na białej liście, spraw , aby kod zaplecza wstawił atrybut do dokumentu przed wysłaniem go przez sieć , z tą wartością jednorazową jako wartością:
<script nonce="EDNnf03nceIOfn39fn3e9h3sdfa">…</script>
Weź nonce wygenerowany w kroku 1, dołącz nonce-go przed nim i spraw , aby Twój backend wygenerował nagłówek CSP z tym jednym z wartości listy źródeł dla script-srclub style-src:
Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'
Tak więc mechanizm używania wartości jednorazowej jest alternatywą dla twojego zaplecza generującego skrót zawartości inline scriptlub stylechcesz zezwolić, a następnie określając ten skrót na odpowiedniej liście źródeł w nagłówku CSP.
Zwróć uwagę, że ponieważ przeglądarki nie mogą (nie mogą) sprawdzać, czy wartość jednorazowa wysyłała zmiany między żądaniami strony, możliwe jest - choć jest to całkowicie niewskazane - pominięcie 1 powyżej i nie zezwalanie zapleczu na nic może po prostu umieścić nonceatrybut ze statyczną wartością w źródle HTML twojego dokumentu i wysłać statyczny nagłówek CSP z tą samą wartością jednorazową.
Ale powodem, dla którego nie chciałbyś używać statycznej wartości nonce w ten sposób, jest to, że prawie całkowicie zniweczyłoby to cały cel używania wartości nonce na początku - ponieważ gdybyś użył takiej statycznej liczby nonce, w tym momencie równie dobrze możesz po prostu używać unsafe-inline.