Polityka bezpieczeństwa treści - Content Security Policy

Polityka bezpieczeństwa treści ( CSP ) to standard zabezpieczeń komputera wprowadzony w celu zapobiegania skryptom krzyżowym (XSS), przechwytywaniu kliknięć i innym atakom polegającym na wstrzyknięciu kodu wynikającym z wykonania złośliwej zawartości w kontekście zaufanej strony internetowej . Jest to rekomendacja kandydata grupy roboczej W3C ds. Bezpieczeństwa aplikacji internetowych, szeroko obsługiwana przez nowoczesne przeglądarki internetowe . CSP zapewnia właścicielom witryn standardową metodę deklarowania zatwierdzonych źródeł treści, które przeglądarki powinny mieć możliwość wczytywania w tej witrynie - obsługiwane typy to JavaScript , CSS , ramki HTML , pracownicy sieci , czcionki , obrazy, obiekty do osadzania, takie jak aplety Java , ActiveX , pliki audio i wideo oraz inne funkcje HTML5 .

Status

Standard, pierwotnie nazwany Content Restrictions, został zaproponowany przez Roberta Hansena w 2004 roku, po raz pierwszy zaimplementowany w Firefoksie 4 i szybko przejęty przez inne przeglądarki. Wersja 1 standardu została opublikowana w 2012 r. Jako rekomendacja kandydata do W3C i szybko z kolejnymi wersjami (Poziom 2) opublikowanymi w 2014 r. Od 2015 r. Projekt poziomu 3 jest rozwijany, a nowe funkcje są szybko adaptowane przez przeglądarki internetowe.

Następujące nazwy nagłówków są używane jako część eksperymentalnych implementacji CSP:

  • Content-Security-Policy - standardowa nazwa nagłówka proponowana przez dokument W3C. Google Chrome obsługuje tę funkcję od wersji 25. Firefox obsługuje tę funkcję od wersji 23, wydanej 6 sierpnia 2013 r. WebKit obsługuje tę funkcję od wersji 528 (kompilacja nocna). Obsługa Microsoft Edge oparta na Chromium jest podobna do Chrome.
  • X-WebKit-CSP - przestarzały, eksperymentalny nagłówek wprowadzony do Google Chrome i innych przeglądarek opartych na WebKit ( Safari ) w 2011 roku.
  • X-Content-Security-Policy - przestarzały, eksperymentalny nagłówek wprowadzony w przeglądarkach opartych na Gecko 2 (Firefox 4 do Firefox 22, Thunderbird 3.3, SeaMonkey 2.1).

Witryna internetowa może zadeklarować wiele nagłówków CSP, łącząc również nagłówki wymuszające i tylko raportujące. Każdy nagłówek będzie przetwarzany osobno przez przeglądarkę.

CSP można również dostarczyć w kodzie HTML za pomocą tagu HTML META , chociaż w tym przypadku jego skuteczność będzie ograniczona.

Internet Explorer 10 i Internet Explorer 11 również obsługują CSP, ale tylko dyrektywę piaskownicy, używając eksperymentalnego X-Content-Security-Policy nagłówka.

Wiele frameworków aplikacji internetowych obsługuje CSP, na przykład AngularJS (natywnie) i Django (oprogramowanie pośredniczące). Instrukcje dotyczące Ruby on Rails zostały opublikowane przez GitHub . Obsługa struktury sieciowej jest jednak wymagana tylko wtedy, gdy zawartość CSP zależy w jakiś sposób od stanu aplikacji internetowej - na przykład użycia nonce źródła. W przeciwnym razie CSP jest raczej statyczny i może być dostarczany z warstw aplikacji internetowych powyżej aplikacji, na przykład na module równoważenia obciążenia lub serwerze sieci Web .

Od 2015 roku W3C proponuje szereg nowych standardów bezpieczeństwa przeglądarek, z których większość jest uzupełnieniem CSP:

  • Integralność zasobów podrzędnych (SRI) , aby zapewnić, że tylko znane, zaufane pliki zasobów (zazwyczaj JavaScript , CSS ) są ładowane z serwerów innych firm (zwykle CDN )
  • Treść mieszana , w celu wyjaśnienia zasad zamierzonej przeglądarki na stronach ładowanych przez HTTPS i łączących zawartość za pośrednictwem zwykłego tekstu HTTP
  • Uaktualnij niezabezpieczone żądania , podpowiadając przeglądarkom, jak postępować ze starszymi linkami na stronach przeniesionych do HTTPS
  • Credential Management , ujednolicony interfejs API JavaScript umożliwiający dostęp do danych uwierzytelniających użytkownika w celu ułatwienia złożonych schematów logowania,
  • Polityka odsyłająca , rozszerzenie CSP, które podpowiada przeglądarce generowanie nagłówków Referer .

Obwodnice

W grudniu 2015 r. I grudniu 2016 r 'nonce' . Opublikowano kilka metod omijania źródeł z białej listy. W styczniu 2016 r. Opublikowano inną metodę, która wykorzystuje białą listę CSP na całym serwerze do wykorzystywania starych i podatnych na ataki wersji bibliotek JavaScript hostowanych na tym samym serwerze (częsty przypadek w przypadku serwerów CDN). W maju 2017 została opublikowana jeszcze jedna metoda ominięcia CSP przy użyciu kodu frameworków aplikacji internetowych.

Tryb działania

Mapowanie między funkcjami HTML5 i JavaScript oraz kontrolkami polityki bezpieczeństwa treści

Jeśli Content-Security-Policy nagłówek jest obecny w odpowiedzi serwera, zgodny klient wymusza deklaratywne zasady białej listy. Przykładowym celem zasad jest ściślejszy tryb wykonywania skryptów JavaScript w celu zapobiegania niektórym atakom typu cross-site scripting. W praktyce oznacza to, że szereg funkcji jest domyślnie wyłączonych:

  • Wbudowany kod JavaScript
    • <script> Bloki,
    • Programy obsługi zdarzeń DOM jako atrybuty HTML (np. onclick )
    • te javascript: linki
  • Wbudowane instrukcje CSS
    • <style> blok
    • style przypisane elementom HTML
  • Dynamiczna ocena kodu JavaScript
    • eval()
    • argumenty łańcuchowe dla funkcji setTimeout i setInterval
    • new Function() konstruktor
  • Dynamiczne instrukcje CSS
    • CSSStyleSheet.insertRule() metoda

Chociaż użycie CSP w nowej aplikacji może być całkiem proste, szczególnie w przypadku frameworka JavaScript zgodnego z CSP , istniejące aplikacje mogą wymagać pewnych zmian - lub złagodzenia zasad. Zalecaną praktyką kodowania dla aplikacji internetowych zgodnych z CSP jest ładowanie kodu z zewnętrznych plików źródłowych ( <script src> ), analizowanie JSON zamiast oceniania go i używanie EventTarget.addEventListener() do ustawiania programów obsługi zdarzeń.

Uwagi

Raportowanie

Za każdym razem, gdy żądany zasób lub wykonanie skryptu narusza zasady, przeglądarka odpali POST żądanie do wartości określonej w naruszeniu report-uri lub report-to zawierające szczegóły naruszenia.

Raporty CSP to standardowe struktury JSON i mogą być przechwytywane przez własne API aplikacji lub publiczne odbiorniki raportów CSP.

W 2018 roku badacze bezpieczeństwa pokazali, jak wysyłać fałszywie pozytywne raporty do wskazanego odbiorcy określonego w report-uri . Pozwala to potencjalnym napastnikom na arbitralne wyzwalanie tych alarmów i może sprawić, że będą one mniej przydatne w przypadku prawdziwego ataku. To zachowanie jest zamierzone i nie można go naprawić, ponieważ przeglądarka (klient) wysyła raporty.

Wyłączenie dodatków i rozszerzeń przeglądarki

Zgodnie z oryginalnym modelem przetwarzania CSP (1.0) (2012–2013) CSP nie powinien zakłócać działania dodatków lub rozszerzeń przeglądarki instalowanych przez użytkownika. Ta funkcja CSP skutecznie umożliwiłaby każdemu dodatkowi, rozszerzeniu lub Bookmarkletowi wstrzyknięcie skryptu do witryn internetowych, niezależnie od pochodzenia tego skryptu, a tym samym zwolnienie z zasad CSP.

Jednak ta polityka została od tego czasu zmodyfikowana (od CSP 1.1) z następującym brzmieniem. Zwróć uwagę na użycie słowa „może” zamiast poprzedniego bezwzględnego sformułowania „powinien (nie)”:

Uwaga: oprogramowanie użytkownika może umożliwiać użytkownikom modyfikowanie lub ominięcie egzekwowania zasad poprzez preferencje użytkownika, bookmarklety, dodatki innych firm do klienta użytkownika i inne podobne mechanizmy.

Bezwzględne sformułowanie „powinno” było używane przez użytkowników przeglądarek w celu zażądania / zażądania przestrzegania zasad i zainstalowania zmian w popularnych przeglądarkach (Firefox, Chrome, Safari) w celu ich obsługi. Było to szczególnie kontrowersyjne, gdy witryny takie jak Twitter i GitHub zaczęły używać silnych zasad CSP, które „zepsuły” korzystanie z Bookmarkletów.

Grupa robocza W3C ds. Bezpieczeństwa aplikacji internetowych uważa taki skrypt za część zaufanej bazy obliczeniowej zaimplementowanej przez przeglądarkę; jednakże przedstawiciel Cox Communications przekonywał grupę roboczą, że to zwolnienie stanowi potencjalną lukę w zabezpieczeniach, która może zostać wykorzystana przez złośliwe lub skompromitowane dodatki lub rozszerzenia.

Zobacz też

Bibliografia

Linki zewnętrzne