W3C mówi, że jest to nowy atrybut w HTML5.1 nazywane nonce
dla style
i script
które mogą być stosowane w treści polityki bezpieczeństwa strony internetowej.
Wyszukałem w Google, ale w końcu nie rozumiem, co właściwie robi ten atrybut i co się zmienia, gdy go używam?
script
istyle
? Coś w rodzaju blokady hotlink?Odpowiedzi:
nonce
Atrybut pozwala na „białej listy” pewne inlinescript
istyle
elementów, unikając korzystania z CSPunsafe-inline
dyrektywy (która pozwoliłaby wszystko inlinescript
/style
), dzięki czemu wciąż zachowują kluczową cechę CSP w postaci zablokowania inlinescript
/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 chcesznonce
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ą: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ł dlascript-src
lubstyle-src
:Tak więc mechanizm używania wartości jednorazowej jest alternatywą dla twojego zaplecza generującego skrót zawartości inline
script
lubstyle
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
.źródło
nonce
warto wkładać wysiłek w używanie atrybutu, jeśli absolutnie nie musisz go używać, nie rób tego. Jest to tak naprawdę przeznaczone tylko do przypadków, w których z jakiegoś powodu nie możesz (jeszcze) pozbyć się niektórych wbudowanych skryptów lub stylów z określonego dokumentu (ale powinieneś to usunąć później). Więc jeśli z jakiegoś powodu utkniesz w potrzebie zachowania wbudowanego skryptu i stylu, w międzyczasie możesz przynajmniej użyć mechanizmu nonce, aby pozwolić przeglądarkom sprawdzić, czy są w porządku. W przeciwnym razie powinieneś po prostu w pełni używać CSP zgodnie z przeznaczeniem i nie zezwalać na żadne wbudowane skrypty ani elementy stylu<script type="text/javascript" nonce>
i<style type="text/css" nonce>