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
- 0przebiegów
- Ostatni
- 19.09.2026start przebiegu
- Stron w przebiegach
- —33 przebiegów bez liczby stron
CARD
karta z kodu CREATO_PING, odczyt 22.09.2026Jak ten parametr trafia do ClickUpa: wynik sondy to linia w subtasku 2. Pomiar, a usterka, którą otwiera — linia w subtasku 1. Podsumowanie (z identyfikatorem CWE i kategorią OWASP), skąd liczy się wskaźnik zagrożenia i status strony. Projekcja z bazy skanera odświeża oba subtaski co godzinę. Do 22.09 każde ustalenie dostawało własny subtask i status ze starego słownika (PODATNA, WARNING…) — te słowa zostały jeszcze w części opisów pomiaru niżej jako język wewnętrzny sond.
| Obszar i ważność | Bezpieczeństwo · niska (B23) |
|---|---|
| Workflow i częstotliwość | creato_ping_security_v2 · P3 działa na LAB247Skaner 2.0, rytm „p3” / „bezpieczenstwo”: premium co 6 h, reszta co 24 h (tier 1–3), co 9 dni (tier 4) · 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 → do_writera (bramka gate z polityki; sito powagi zniknęło 18.09)CREATO_PING/config/incident_policy.toml → [finding] missing_permissions_policy |
| Retencja odczytów | Surowy pomiar jako NIEZMIENNY wiersz tabeli `odczyty` w bazie skanera (wejście, wyjście, dowody, sha karty sondy i helpera, commit kodu) — trigger odrzuca każdą zmianę. Okno retencji z kohorty: 90 dni premium, 30 dni reszta; poza oknem zostają odczyty z werdyktem problemu, akcją albo etykietą, bo replay reguł ich potrzebuje (`skaner/retencja.py`). Do LAB247 ten kanał nie idzie (do bazy serwisu jadą dziś tylko sprawdzenia dostępności), więc poza odczytem zostaje werdykt w tabeli `werdykty` i sprawa w tabeli `sprawy`. |
| 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/skaner/klasyfikacja.py · CREATO_PING/skaner/usterki.toml · CREATO_PING/skaner/ocena.py · odczyt 22.09.2026 |
missing_permissions_policy: bramka polityki zamknięta (gate=false) — zostaje odczyt i werdykt „bez_subtaska” w bazie skanera, sprawa nie powstaje, więc usterka „Brak ograniczeń kamery/mikrofonu dla obcych skryptów” (waga 1) nie wchodzi do wskaźnika strony. Utwardzenie, nie incydent (waga 1 w katalogu usterek).
| Kod | Finding | Severity | Pewność | Skutek | Finding / alarm | Waga → ocena | Co zrobić |
|---|---|---|---|---|---|---|---|
| B23.01 | Brak Permissions-Policymissing_permissions_policy | Niska | Ewidentne | bez wpływu | nie / nie | waga 1 → ocena 2 (zielony) | Dodaj Permissions-Policy z pustą listą dla nieużywanych uprawnień. |
| Kod i klucz | B23.01 · missing_permissions_policy · w tabeli typów |
|---|---|
| Co znaczy | Skrypty na stronie mają nieograniczony dostęp do kamery, mikrofonu i geolokalizacji. Stary Feature-Policy liczy się jako spełnienie. |
| Kiedy powstaje | Emitowany, gdy w nagłówkach odpowiedzi (nazwy lowercase) brak 'permissions-policy'.Tylko p3. Jedno żądanie HEAD {scheme}://{domena} (UA „CREATO_PING-secheaders/1.0”, follow_redirects, timeout 6 s / connect 2 s); przy 405 powtórka GET. Sprawdzane nagłówki odpowiedzi końcowej bez względu na kod statusu; wartość nie jest walidowana (liczy się sama obecność nazwy). Błąd httpx = brak jakichkolwiek findingów nagłówków. Alias: obecność feature-policy = spełnienie (security_headers.py:53–55). |
| Severity · pewność | Niska · Ewidentne |
| Skutek dla strony | bez wpływu · tylko statystyka (gate=false) · alarm nie |
| Waga → ocena | waga 1 → ocena 2 (zielony) |
| Klasyfikacja | CWE: CWE-693 (Protection Mechanism Failure)OWASP Top 10:2025: A02:2025 Security MisconfigurationOCSF 1.9.0: Compliance Finding (class_uid 2003) |
| Rekord OCSF | finding_info.analytic.uid = "B23.01" · analytic.name = "missing_permissions_policy" · finding_info.types = ["B23 Permissions-Policy"] |
| Co zrobić | Dodaj Permissions-Policy z pustą listą dla nieużywanych uprawnień. |
| Wersje typu |
|
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.