Jak działa ta kontrola
Scanaris sprawdza w głównej odpowiedzi Twojej strony obecność dwóch nagłówków: Cross-Origin-Opener-Policy (COOP) i Cross-Origin-Resource-Policy (CORP). Jeśli brakuje jednego lub obu, otwiera jedno ustalenie o niskiej wadze wskazujące, których. Nie ocenia wartości, tylko obecność. To dwa nagłówki izolacji źródła najłatwiejsze do wdrożenia; trzeci z rodziny, Cross-Origin-Embedder-Policy, nie jest wymagany, bo psuje każdy zasób zewnętrzny, który nie współpracuje, i rzadko się opłaca na zwykłej stronie.
Co chroni każdy z nich
COOP decyduje, czy Twoje okno dzieli „grupę kontekstów przeglądania" z tym, które je otworzyło, albo z tymi, które Ty otwierasz. Przy same-origin strona z innej domeny, która otwiera Twoją przez window.open, nie ma już do niej użytecznego odniesienia (i odwrotnie), co ucina ataki manipulacji między kartami i zamyka drogę, którą wykorzystuje się wycieki pamięci typu Spectre. CORP decyduje, kto może osadzać Twoje zasoby. Przy same-origin inna strona nie może załadować Twoich obrazów, skryptów ani fontów znacznikiem <img> lub <script>, nawet jeśli adresy są publiczne: przeglądarka blokuje odpowiedź, zanim dotrze do tamtej strony. Żaden z nich nie naprawia istniejącej luki; to obrona w głąb, i dlatego ich brak ma niską wagę.
Jak je dodać
Zalecane wartości dla strony, która nie dzieli zasobów z innymi domenami:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Resource-Policy: same-origin
- Nuxt: w
routeRuleswnuxt.config, w regule'/**', obok pozostałych nagłówków. - Next.js: w funkcji
headers()wnext.config.js. - Vercel: w
vercel.json, sekcjaheaders. Netlify: w_headers, pod/*. - nginx: dwie linie
add_header ... always;w blokuserver. Apache:Header always setw VirtualHost. - Express:
helmet()dodaje je domyślnie w nowszych wersjach; sprawdź, którą masz zainstalowaną.
Dwie rzeczy do sprawdzenia przed włączeniem
- Logowanie przez wyskakujące okno. Jeśli używasz „Zaloguj przez Google" lub innego dostawcy w trybie popup, okno musi rozmawiać z tym, które je otworzyło. Przy
same-originprzestaje działać; użyjsame-origin-allow-popups, które zachowuje ochronę i dopuszcza ten przypadek. - Zasoby, które serwujesz innym domenom. Jeśli Twoje obrazy lub fonty są ładowane z innej Twojej strony (blog na innej domenie, widżet osadzany przez innych),
same-originzablokuje je tam. Użyjsame-site, jeśli druga strona to subdomena, albocross-originna konkretnych ścieżkach tych zasobów.
Sprawdź, czy naprawione
curl -sI https://twojadomena.pl | grep -iE "^cross-origin-(opener|resource)-policy:"
Muszą pojawić się oba wiersze. Potem otwórz stronę, przetestuj logowanie i każdą integrację z popupem i zajrzyj do konsoli przeglądarki: zasób zablokowany przez CORP pojawia się tam z wyraźnym komunikatem.
Często zadawane pytania
Czy to zastępuje CORS?
Nie, uzupełniają się i działają w przeciwnych kierunkach. CORS otwiera Twoje odpowiedzi dla konkretnych źródeł, gdy to potrzebne; CORP domyślnie zamyka je przed każdym, kto chce je osadzić. Możesz mieć CORP same-origin na całej stronie i otwarty CORS na jednej ścieżce API.
Czy potrzebuję też Cross-Origin-Embedder-Policy?
Tylko jeśli chcesz SharedArrayBuffer albo timerów wysokiej rozdzielczości (montaż wideo, emulatory, niektóre aplikacje WebAssembly). COEP wymaga, żeby wszystko, co osadzasz, miało CORP lub CORS, a większość skryptów zewnętrznych tego nie ma. Dla zwykłej strony COOP i CORP wystarczą.
O ile poprawia ocenę?
Niewiele w punktach, bo to ustalenie o niskiej wadze; ale to jedna z niewielu poprawek bez skutków ubocznych, jeśli zrobisz dwa powyższe sprawdzenia. Nagłówki, które naprawdę ważą, są w nagłówki bezpieczeństwa i wyjaśnione w nagłówki HTTP dla ludzi.