Data publikacji: 17 listopada 2025 r.
Od Chrome 141 możesz wziąć udział w eksperymencie z źródłem, aby przetestować nowe funkcje zasad bezpieczeństwa treści (CSP), które wprowadza Chrome. Te funkcje pomagają witrynom chronić się przed atakami XSS, ponieważ umożliwiają lepsze tworzenie list dozwolonych znanych źródeł JavaScriptu. Dodanie do listy dozwolonych znanych skryptów JavaScript i zablokowanie wszystkich innych źródeł to skuteczny sposób zapobiegania atakom XSS. Wstrzyknięty przez atakującego kod JavaScript nie będzie znajdować się na liście dozwolonych, a więc zostanie zablokowany.
Bez tych funkcji trudno jest mieć „ścisłą” strategię CSP, która zezwala na wszystkie źródła JavaScript bez mechanizmu komunikacji nonce między hostem skryptu a witryną lub bez znajomości pełnego skrótu skryptu z wyprzedzeniem. Obie te metody są trudne do wdrożenia, jeśli skrypt często się zmienia i jest hostowany przez zaufany, ale oddzielny podmiot zewnętrzny. Dodatkowo, jeśli jakikolwiek skrypt musi używać funkcji eval, CSP wymaga obecnie, aby umieścić na liście dozwolonych wszystkie skrypty, co znacznie osłabia ochronę.
Staramy się rozwiązać ten problem, udostępniając w script-src skuteczniejszy mechanizm dodawania skryptów do listy dozwolonych na podstawie adresu URL oraz mechanizm dodawania do listy dozwolonych wywołań funkcji eval. Możesz użyć dotychczasowego mechanizmu haszowania w script-src, aby dodać do listy dozwolonych adresy URL określonych skryptów i kod JavaScript przekazywany do funkcji eval (oraz innych funkcji podobnych do eval). Lista dozwolonych oparta na adresach URL nie jest może tak rygorystyczna jak CSP oparta na integralności, ale ten mechanizm powinien być znacznym ulepszeniem dotychczasowej listy dozwolonych opartej na nazwach hostów.
Uważamy, że ta zasada CSP jest łatwiejsza do wdrożenia, a jednocześnie skutecznie ogranicza ataki XSS, blokując niedozwolone skrypty wbudowane i skrypty eval. Te nowe funkcje zostały starannie zaprojektowane i wdrożone, aby umożliwić witrynom ustawienie zasad, które zapewniają lepsze zabezpieczenia w przeglądarkach obsługujących nowe funkcje, bez powodowania awarii lub pogorszenia bezpieczeństwa w przeglądarkach, które ich nie obsługują, bez konieczności wykrywania typu przeglądarki.
Przypadki użycia
Dodawanie określonych adresów URL do listy dozwolonych do użycia z atrybutem script-src
Witryny, które chcą umieścić na liście dozwolonych konkretne skrypty do użycia z atrybutem script-src, mają obecnie 2 możliwości: umieścić na liście dozwolonych zawartość skryptów za pomocą funkcji sprawdzania integralności zasobów podrzędnych (SRI) lub użyć host-source, aby umieścić na liście dozwolonych nazwy hostów. SRI często nie jest praktyczne w przypadku skryptów, które często się zmieniają (np. skryptów analitycznych). Określenie host-source zostanie zignorowane, jeśli ustawiony jest też parametr strict-dynamic. Nie jest to też kompleksowa ochrona, ponieważ nie obejmuje parametrów adresu URL. Ta zmiana
umożliwi dodawanie skryptów do listy dozwolonych za pomocą skrótu ich (pełnego) adresu URL, obsługując
zarówno skrypty dynamiczne, jak i konfiguracje, które używają strict-dynamic.
Dodawanie do listy dozwolonych konkretnych skryptów do użycia z funkcjami eval lub podobnymi
Niektóre witryny wymagają użycia funkcji eval lub podobnych (przekazywanie kodu jako literałów ciągów znaków w setTimeout, setInterval i setImmediate). W przypadku tych witryn jedyną dostępną opcją CSP jest unsafe-eval, która umożliwia wszystkie wywołania funkcji eval. Dodajemy mechanizm, który umożliwia dodawanie określonych danych wejściowych do listy dozwolonych w przypadku funkcji eval. Ten nowy mechanizm umożliwia wąskie dodawanie do białej listy konkretnych skryptów potrzebnych do działania usługi przez bezpośrednie haszowanie zawartości skryptu, zamiast wymuszać podawanie zbyt szerokiego standardu CSP unsafe-eval.
Rozpocznij
Aby wypróbować obsługę skryptów i funkcji eval, weź udział w
testowaniu origin w zakresie skrótów adresów URL i funkcji eval w CSP, które będzie prowadzone w Chrome w wersjach od 141 do 144.script-src
Dodawanie skrótów do script-src
Adresy URL są dodawane do białej listy przez dodanie wartości do dyrektywy CSP script-src w formie url-<hash-algorithm>-<script-url-hash>. Umożliwi to wykonanie wszystkich treści, które są dostępne pod tym adresem URL, niezależnie od ich rodzaju. Hash musi zawierać tylko początkowy adres URL (adres URL na stronie), a nie adres URL, do którego ten adres URL przekierowuje. Obsługiwane są zarówno bezwzględne, jak i względne adresy URL.
Na przykład ten nagłówek CSP umieści na liście dozwolonych skrypt dostarczany pod adresem https://example.com/example.js:
Content-Security-Policy: script-src 'sha256-u2cYltM/2wbvoRR0jMZ57KmFdVqqdPYa6GtdykFwBGc=';
gdzie 'sha256-u2cYltM/2wbvoRR0jMZ57KmFdVqqdPYa6GtdykFwBGc=' to skrót SHA256 adresu https://example.com/example.js.
Skrypty oceniane za pomocą eval lub new Function można dodać do listy dozwolonych, umieszczając eval-<hash-algorithm>-<script-contents-hash> w atrybucie src skryptu. Na przykład ten nagłówek CSP zezwoli na przekazywanie ciągu znaków alert("hello world") do eval():
Content-Security-Policy: script-src 'eval-sha256-4vpsisrBP00v+tF/SsQ3RXWWYF28JSvTpR9D/wrxn/0=';
gdzie 'eval-sha256-4vpsisrBP00v+tF/SsQ3RXWWYF28JSvTpR9D/wrxn/0=' to skrót sha256
alert("hello world").
Aby ułatwić wdrożenie, gdy witryna zdecyduje się na udział w eksperymencie Origin Trial, w konsoli Narzędzi deweloperskich będą wyświetlane hasze zarówno adresów URL, jak i elementu eval, a także będą one uwzględniane w raportach CSP. Oznacza to, że można użyć rygorystycznej zasady report-only, aby wyliczyć wszystkie skróty potrzebne do utworzenia listy dozwolonych.
Zachowanie zgodności wstecznej
Aby zezwolić na wdrażanie tych zasad, zanim wszystkie przeglądarki dodadzą obsługę, po listach dozwolonych opartych na hostach można umieścić skróty adresów URL. Przeglądarki, które rozpoznają nowe typy skrótów, będą ignorować poprzedzające je listy dozwolonych oparte na hostach, a przeglądarki, które nie rozpoznają nowych typów skrótów, nadal będą egzekwować listę dozwolonych opartą na hostach, co pozwoli witrynom ustawiać obie listy. W przeglądarkach, które obsługują bardziej rygorystyczne zasady, nie będzie ryzyka awarii, jak pokazano w poniższym przykładzie.
Content-Security-Policy: script-src 'https:' 'url-sha256-u2cYltM/2wbvoRR0jMZ57KmFdVqqdPYa6GtdykFwBGc='
Wprowadziliśmy też dyrektywę strict-dynamic-url, która jest odpowiednikiem dyrektywy strict-dynamic, ale ma zastosowanie tylko wtedy, gdy ustawione są hasze adresów URL. Ponieważ zasada „strict-dynamic” powoduje ignorowanie list dozwolonych opartych na hostach, witryna, która chce dodać do listy dozwolonych konkretny skrót i zastosować do niego zasadę „strict-dynamic”, może użyć zasady takiej jak ta:
Content-Security-Policy: https: 'strict-dynamic-url' 'url-sha256-u2cYltM/2wbvoRR0jMZ57KmFdVqqdPYa6GtdykFwBGc='
W tym przykładzie przeglądarki, które nie obsługują jeszcze skrótów, będą egzekwować tylko https:. Podobnie dyrektywa unsafe-eval będzie ignorowana przez obsługujące przeglądarki, gdy będą obecne hasze eval. Na przykład ta zasada zostanie oceniona jakounsafe-eval. Umożliwia to korzystanie ze wszystkich eval() w przeglądarkach, które nie obsługują jeszcze hashów eval, a jednocześnie zezwala na korzystanie z eval() alert("hello world") w przeglądarkach, które obsługują hashe eval.
Content-Security-Policy: script-src "unsafe-eval" "'eval-sha256-4vpsisrBP00v+tF/SsQ3RXWWYF28JSvTpR9D/wrxn/0='"
Podziel się opinią
Chętnie poznamy opinie deweloperów na temat tych rozszerzeńscript-src. Wszelkie uwagi możesz zgłaszać jako problem na GitHubie.