Produkt Foreto / 02

Warden — Content Security Policy

Polityka bezpieczeństwa treści zbudowana z tego, co serwis naprawdę ładuje. Najpierw przeglądarki raportują zasoby, potem z rejestru powstaje polityka do odczytania, poprawienia i włączenia.

Nagłówek Content Security Policy to jedna z najskuteczniejszych barier przeciwko wstrzykniętemu kodowi — i jedna z najrzadziej wdrażanych. Napisanie go ręcznie oznacza przejście po wszystkich podstronach z konsolą przeglądarki i wypisanie z niej każdego adresu, bez pewności, że lista jest pełna.

Warden odwraca kolejność: najpierw zbiera materiał, potem buduje z niego politykę.

Porozmawiajmy o wdrożeniu Jak to działa — artykuł

Co rozwiązuje

Polityka pisana z pamięci opisuje serwis, który autor pamięta — a nie ten, który działa.

Problem nie polega na tym, że wypisywanie adresów jest żmudne, tylko na tym, że jest niesprawdzalne:

  • lista zasobów nie leży w kodzie motywu, tylko w przeglądarce — po wykonaniu wtyczek, osadzeń, analityki i ramek płatności
  • jedno przeoczenie blokuje coś, czego nikt nie testował
  • usterka wychodzi zwykle tam, gdzie nikt nie zagląda: w koszyku albo w kroku płatności
  • bez raportów nie ma jak stwierdzić, czy lista jest kompletna

Jak działa

Trzy fazy zamiast jednego skoku.

  • Nauka — wychodzi nagłówek report-only. Nic nie jest blokowane, a przeglądarki raportują każdy wczytany zasób.
  • Generowanie — z rejestru powstaje polityka: każda dyrektywa zachowuje „self”, adresy zewnętrzne są wypisane wprost, całość jest do poprawienia przed włączeniem.
  • Egzekwowanie — polityka idzie na produkcję. Raportowanie może zostać włączone, więc to, co zepsuje przyszła zmiana, nadal się pokaże.
  • Raporty są agregowane po dyrektywie i adresie źródłowym, więc tabela nie rośnie razem z ruchem.

Czego świadomie nie robi

Uczenia nie da się włączyć z panelu, jeśli je zamkniesz. Faza nauki to tysiące raportów na godzinę, a każdy z nich to zapis do bazy. Stała w konfiguracji sprawia, że trybu nie włączy ani kliknięcie, ani przypadkowe polecenie, ani baza przywieziona ze środowiska testowego.

Raporty nie zbierają adresów koszyka, płatności ani konta. Te adresy niosą klucze zamówień i tokeny resetu hasła, a do listy dozwolonych źródeł nie wnoszą nic ponad to, co widać na pozostałych podstronach. Zapytania są obcinane przed zapisem.

Panel administracyjny nie jest domyślnie objęty polityką. Kokpit jest pełen kodu osadzonego w stronie, więc polityka na tyle ostra, żeby cokolwiek tam dawała, rozłożyłaby edytor. Chronimy warstwę publiczną, bo to ona przyjmuje ruch z zewnątrz.