nonce
Atrybut pozwala na „białej listy” pewne inline script
i style
elementów, unikając korzystania z CSP unsafe-inline
dyrektywy (która pozwoliłaby wszystko inline script
/ style
), dzięki czemu wciąż zachowują kluczową cechę CSP w postaci zablokowania inline script
/ style
w ogóle.
Więc nonce
atrybutem 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 nonce
atrybutu, 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
/, style
który chcesz nonce
umieś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-src
lub 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 script
lub style
chcesz 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ć nonce
atrybut 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
.