Permissions-Policy
ważność niskamierzonysposób security_headers
Nagłówek ograniczający dostęp skryptów do kamery, mikrofonu i geolokalizacji. Brak oznacza, że każdy skrypt na stronie może o nie poprosić.
Stary nagłówek Feature-Policy liczy się jako spełnienie.
WIKI
artykuł z 16.09.2026 · źródeł 9Nagłówek Permissions-Policy to parametr monitoringu stron internetowych, który sprawdza, czy odpowiedź serwera zawiera nagłówek Permissions-Policy albo jego poprzednika Feature-Policy. Pomiar kończy się jednym z trzech wyników: nagłówek obecny, brak nagłówka albo nie udało się pobrać odpowiedzi. Permissions Policy to mechanizm, który pozwala twórcom stron selektywnie włączać i wyłączać funkcje oraz interfejsy przeglądarki [1].
Jak działa
Nagłówek ma składnię pól strukturalnych HTTP: kluczem jest nazwa funkcji, a wartością lista dozwolonych pochodzeń, np. geolocation=(self "https://example.com") albo camera=() [1]. Słownik (ang. Dictionary) i lista w nawiasach (ang. Inner List) to typy zdefiniowane w RFC 9651 [7]. Lista może zawierać *, czyli wszystkie pochodzenia, self, czyli dokument i ramki z tego samego pochodzenia, albo wskazane pochodzenia. Pusta lista wyłącza funkcję w dokumencie i we wszystkich ramkach [2]. Wartości * i () występują wyłącznie samodzielnie, a self można łączyć z innymi pochodzeniami [2]. Specyfikacja dopuszcza też pochodzenia z symbolem wieloznacznym dla subdomen, np. https://*.example.com [1].
Poza kamerą, mikrofonem i geolokalizacją polityka obejmuje m.in. tryb pełnoekranowy, interfejs płatności Payment Request i WebUSB [2]. MDN jako zastosowania wymienia też zmianę domyślnego autoodtwarzania wideo i zezwolenie ramkom na tryb pełnoekranowy [3].
Każda funkcja ma domyślną listę, * albo self [1]. Dla kamery, mikrofonu i geolokalizacji jest to self [5] [9] [6]: dostęp mają dokument główny i ramki z tego samego pochodzenia [6]. Ramka z obcego pochodzenia potrzebuje atrybutu allow elementu iframe [4], a przy ustawionym nagłówku funkcję musi dopuszczać zarówno polityka strony, jak i ten atrybut [3]. Ramka nie może włączyć funkcji, którą wyłączył rodzic [1] [3]. Skrypty dziedziczą politykę kontekstu, w którym działają, niezależnie od swojego pochodzenia [3].
Zablokowana funkcja kończy się błędem: getUserMedia() odrzuca obietnicę z wyjątkiem NotAllowedError [5], a geolokalizacja zwraca kod PERMISSION_DENIED [6].
Standardy i specyfikacje
- Permissions Policy (W3C, szkic roboczy) definiuje funkcje sterowane polityką, listy dozwolonych pochodzeń i dziedziczenie do ramek. Specyfikacja nosiła wcześniej nazwę Feature Policy [1].
- Feature-Policy w Chrome od wersji 88 działa jako alias nowego nagłówka, a gdy odpowiedź zawiera oba, pierwszeństwo ma
Permissions-Policy[4]. Stary nagłówek miał inną składnię:geolocation 'self' https://example.com; camera 'none'zamiastgeolocation=(self "https://example.com"), camera=()[4]. Składnia atrybutuallowsię nie zmieniła [3]. - Raportowanie. Dyrektywa może nieść parametr
report-towskazujący odbiorcę zdefiniowanego nagłówkiemReporting-Endpoints; przy naruszeniu, np. wywołaniugetCurrentPosition(), przeglądarka wysyła raport [2]. Chrome zaznacza też zmianę wobec starego nagłówka: samo dopisanie pochodzenia do listy nie włącza już funkcji w obcej ramce [4]. - MDN oznacza dyrektywę
camerajako eksperymentalną i niedziałającą w części najczęściej używanych przeglądarek [5]. - OWASP zaleca ustawienie nagłówka i wyłączenie funkcji, których strona nie potrzebuje, np.
geolocation=(), camera=(), microphone=()[8].
Zagrożenia i skutki
Polityka a zgoda użytkownika. Permissions Policy decyduje, czy funkcja jest w dokumencie w ogóle dostępna; interfejs uprawnień (Permissions API) obsługuje zgodę, której udziela użytkownik [3]. Gdy polityka blokuje funkcję, użytkownik zwykle nie widzi pytania [3]. Gdy polityka funkcję dopuszcza, o dostępie do funkcji wrażliwych nadal ostatecznie decyduje użytkownik w oknie z pytaniem [4]. Brak nagłówka nie daje więc nikomu kamery bez wiedzy użytkownika.
Skrypty zewnętrzne. Skrypt osadzony bezpośrednio na stronie dziedziczy jej politykę, niezależnie od pochodzenia [3]. Przy domyślnej liście self dokument główny ma dostęp do geolokalizacji [6], więc skrypt reklamowy lub analityczny wczytany do strony może poprosić o lokalizację w jej imieniu, a użytkownik zobaczy pytanie od tej strony. Pusta lista w nagłówku blokuje takie wywołanie [2].
Ramki. Obce ramki domyślnie nie dostają funkcji z listą self [1]. Ryzyko rośnie przy liście *, która dopuszcza funkcję we wszystkich ramkach bez względu na pochodzenie [2].
Nadmierna blokada. Pusta lista wyłącza funkcję także w dokumencie głównym [2], więc polityka przepisana bez przeglądu może zablokować funkcje, z których strona korzysta: wywołania zakończą się błędem [5] [6].
Przykłady
| Nagłówek albo sytuacja | Skutek w przeglądarce |
|---|---|
| brak nagłówka | kamera, mikrofon, geolokalizacja dla dokumentu i ramek własnych [5] [6] [9] |
camera=(), microphone=(), geolocation=() | funkcje wyłączone w dokumencie i ramkach [2] [8] |
geolocation=(self "https://example.com") i ramka z allow="geolocation" | lokalizacja dla strony i tej jednej obcej ramki [6] |
geolocation=* | funkcja dozwolona we wszystkich ramkach [2] |
sam Feature-Policy: camera 'none' | Chrome od wersji 88 traktuje go jak alias [4] |
| oba nagłówki naraz | wygrywa Permissions-Policy [4] |
| funkcja zablokowana polityką | błąd bez okna z pytaniem [3] |
- [1] Permissions Policy · W3C
- [2] Permissions-Policy header · MDN Web Docs
- [3] Permissions Policy · MDN Web Docs
- [4] Control browser features with Permissions Policy · Chrome for Developers
- [5] Permissions-Policy: camera directive · MDN Web Docs
- [6] Permissions-Policy: geolocation directive · MDN Web Docs
- [7] RFC 9651 — Structured Field Values for HTTP · IETF
- [8] HTTP Security Response Headers Cheat Sheet · OWASP
- [9] Permissions-Policy: microphone directive · MDN Web Docs
STATS
wyniki z systemu · tylko liczby zbiorczeTen parametr nie zapisuje odczytu per strona — przebieg zostawia tylko ustalenia, więc liczby sprawdzonych stron i wyników „ok” system nie ma. Pojawią się po wdrożeniu zapisu przebiegów per strona per parametr.
Ten parametr nie otworzył jeszcze żadnego ustalenia w bazie LAB247. Pusto nie znaczy „czysto” — znaczy, że nic nie przekroczyło reguły.
- Przebiegów
- 33sposób security_headers
- W 30 dni
- 33przebiegów
- Ostatni
- 19.09.2026start przebiegu
- Stron w przebiegach
- —33 przebiegów bez liczby stron
CARD
karta z kodu CREATO_PING, odczyt 16.09.2026| Obszar i ważność | Bezpieczeństwo · niska (B23) |
|---|---|
| Workflow i częstotliwość | creato_ping_security_v2 · P3 działa na LAB247cron co 24 h, T1–T3; T4 raz po anomalii · Dokładny skan. dns_integrity porównuje NS, MX, SPF i DMARC z wzorcem z poprzedniego przebiegu. |
| Sonda i helper | sposób security_headers · CREATO_PING/helpers/security_headers.py |
| Testy |
|
| Typ wyniku | 0 albo 1 ustalenie missing_permissions_policy |
| Jednostka | brak — wynik jakościowy (obecność nagłówka) |
| Próg i reguła | Timeout 6,0 s, połączenie 2,0 s (stała w helperze). Reguła: brak obu nagłówków = missing_permissions_policy; którykolwiek z dowolną wartością = ok. |
| Gdzie leżą pokrętła | CREATO_PING/helpers/security_headers.py → _CHECKS, _TIMEOUT, _ALIASESCREATO_PING/helpers/security_runner.py → _TASK_SEVERITIES (dalej idą tylko urgent i high)CREATO_PING/config/incident_policy.toml → [finding] missing_permissions_policy |
| Retencja odczytów | Żadna: ustalenie odpada w filtrze przebiegu, a przebieg z --no-stats nie zapisuje licznika. Z tego kanału nic nie trafia do bazy LAB247. |
| Znane rozbieżności |
|
| Karta przepisana z | CREATO_PING/helpers/security_headers.py · CREATO_PING/helpers/security_runner.py · CREATO_PING/config/incident_policy.toml · CREATO_PING/workflows/_prod/creato_ping_security_v2.json · odczyt 16.09.2026 |
Helper zgłasza powagę niską, a filtr przebiegu przepuszcza tylko pilną i wysoką — ustalenie odpada, zanim zostanie odczytana polityka incydentów. Przebieg produkcyjny idzie z --no-stats, więc nie zostaje nawet licznik. Wpis w polityce (gate=false) nie jest osiągany; nawet po przejściu filtra nie powstałby subtask. Utwardzenie, nie incydent.
| Ustalenie | Powaga | Pewność | Skutek | Subtask / alarm | Co zrobić |
|---|---|---|---|---|---|
| Brak Permissions-Policymissing_permissions_policy | Niskie | Ewidentne | bez wpływu | nie / nie | Dodaj Permissions-Policy z pustą listą dla nieużywanych uprawnień. |
LOOP
bez pętliTrafności jeszcze nie liczymy: zamknięcie subtaska nie niesie dziś werdyktu (prawdziwy / fałszywy / nie dało się sprawdzić). Cztery liczby pojawią się, gdy każde zamknięcie dostanie werdykt — to warunek startu pętli 1.
Ten parametr nie przeszedł jeszcze żadnej pętli. Kolejność po pierwszych pięciu grupach ustali miara trafności.