Privacy & Security

Čo dokáže hlavička Permissions-Policy skutočne uzamknúť

Praktický sprievodca funkciami prehliadača, ktoré môžete obmedziť, tým, čo kontrolovať nemôžete, a nasadením hlavičky bez narušenia užitočnej funkcionality.

The Wux Webtools Team The Wux Webtools Team 9 min čítania Pomocou AI, kontrolované človekom
A browser interface with feature toggles limiting access for a page and embedded frames.
Obsah
  1. Stručná verzia
  2. Čo Permissions-Policy riadi
  3. Čo dokáže uzamknúť na vašich vlastných stránkach
  4. Čo dokáže uzamknúť v iframes
  5. Čo uzamknúť nedokáže
  6. Rozumná predvolená politika
  7. Ako nasadiť bez rozbitia vecí
  8. 1. Zmapujte používanie funkcií
  9. 2. Začnite v prostredí s nízkym rizikom
  10. 3. Tam, kde treba, používajte politiky špecifické pre stránku
  11. 4. Overte skutočnú odpoveď
  12. 5. Dokumentujte výnimky
  13. Bežné syntaktické chyby
  14. Praktická hodnota pre súkromie

Stručná verzia

Permissions-Policy je hlavička HTTP odpovede, ktorá webu umožňuje obmedziť prístup k určitým funkciám prehliadača: kamera, mikrofón, geolokácia, fullscreen, platby, senzory a dlhý zoznam menších API.

Nie je to všeobecný štít na ochranu súkromia. Nezastaví všetko sledovanie, nezablokuje cookies, nezabráni sieťovým požiadavkám ani neurobí JavaScript tretích strán bezpečným. To, čo vie robiť dobre, je užšie, no stále hodnotné: obmedziť schopnosti prehliadača dostupné vašim vlastným stránkam a vloženým rámcom.

Je to dôležité, pretože moderné weby sú poskladané z analytických úryvkov, mediálnych embedov, chatovacích widgetov, nástrojov na správu súhlasov, reklamných skriptov, máp, platobných tokov a interných experimentov. Väčšina týchto komponentov nepotrebuje prístup k výkonným API zariadenia. Dobrá politika to výslovne stanoví.

Ak už kontrolujete hlavičky v produkcii, spojte túto prácu s priamou kontrolou skutočnej odpovede. Náš sprievodca ladením presmerovaní a HTTP hlavičiek v produkcii pokrýva návyk, na ktorom tu záleží: kontrolovať, čo prehliadač naozaj dostane, nie to, čo podľa konfiguračného súboru malo nastať.

Čo Permissions-Policy riadi

Hlavička riadi prístup k pomenovaným funkciám prehliadača. Presný zoznam sa časom mení, pretože sa menia API prehliadačov, ale medzi bežné direktívy patria:

  • camera
  • microphone
  • geolocation
  • fullscreen
  • payment
  • usb
  • bluetooth
  • accelerometer
  • gyroscope
  • magnetometer
  • screen-wake-lock
  • clipboard-read
  • clipboard-write
  • publickey-credentials-get
  • interest-cohort v starších diskusiách, dnes už väčšinou historická téma

Direktíva môže povoliť funkciu nikomu, aktuálnemu originu alebo vybraným originom. Napríklad:

Permissions-Policy: camera=(), microphone=(), geolocation=(self)

To znamená, že kamera a mikrofón sú pre dokument a jeho vnorené kontexty prehliadania zakázané, zatiaľ čo geolokácia je povolená iba pre rovnaký origin.

Priepustnejší príklad:

Permissions-Policy: geolocation=(self "https://maps.example"), fullscreen=(self "https://video.example")

Toto umožňuje vášmu vlastnému originu a jednému pomenovanému poskytovateľovi máp používať geolokáciu a vášmu vlastnému originu plus poskytovateľovi videa požiadať o fullscreen.

Politiku vyhodnocuje prehliadač. Ak je funkcia zakázaná, JavaScript používajúci dané API by mal zlyhať alebo sa správať, akoby nebola dostupná. Presný spôsob zlyhania závisí od API. Niekedy sa promise odmietne. Niekedy sa schopnosť jednoducho nejaví ako použiteľná.

Čo dokáže uzamknúť na vašich vlastných stránkach

Na stránkach prvej strany je Permissions-Policy najužitočnejšia ako ochranné zábradlie. Znižuje dosah náhodného alebo neočakávaného kódu.

Marketingová stránka napríklad pravdepodobne nepotrebuje mikrofón, kameru, Bluetooth, USB, pohybové senzory ani platobné API. Tieto funkcie môžete globálne zakázať:

Permissions-Policy: camera=(), microphone=(), bluetooth=(), usb=(), payment=(), accelerometer=(), gyroscope=(), magnetometer=()

To nerobí každý skript na stránke dôveryhodným. Znamená to však, že ak sa experiment v tag manageri, kompromitovaná závislosť alebo vložený widget pokúsi zavolať obmedzené API, prehliadač by mu nemal udeliť prístup.

Pre tímy s mnohými prispievateľmi je to užitočné východisko. Presúva diskusiu od neurčitej dôvery k explicitnej schopnosti. Ak budúca funkcia skutočne potrebuje kameru, niekto musí zmeniť politiku a vysvetliť prečo.

To je správny druh trenia.

Čo dokáže uzamknúť v iframes

Hlavička je obzvlášť užitočná pri vloženom obsahu.

Prehliadače už považujú iframes za samostatné kontexty prehliadania, ale vložený obsah tretích strán môže stále žiadať o výkonné funkcie, ak to povoľuje politika a atribúty iframe. Permissions-Policy umožňuje nadradenej stránke nastaviť strop.

Ak napríklad vaša stránka vkladá prehrávač videa, widget podpory a mapu, nemusíte každému rámcu dávať prístup ku každej funkcii. Fullscreen môžete povoliť iba rámcu s videom a geolokáciu iba rámcu s mapou.

Treba rozumieť dvom vrstvám:

  1. HTTP hlavička Permissions-Policy nastavuje politiku pre dokument.
  2. Atribút iframe allow môže delegovať konkrétne funkcie na rámec, ale iba v rozsahu, ktorý povoľuje nadradená politika.

Jednoduchý iframe môže vyzerať takto:

<iframe src="https://video.example/embed/123" allow="fullscreen"></iframe>

Ak vaša hlavička fullscreen úplne zakáže, atribút iframe nemôže tento zákaz obísť. Ak vaša hlavička fullscreen pre daný origin povoľuje, atribút iframe ho môže delegovať.

Táto hierarchia je jedným z dôvodov, prečo sa hlavičku oplatí používať. Platformovým alebo bezpečnostným tímom dáva spôsob, ako nastaviť hranice pre celý web, a zároveň produktovým tímom umožňuje povoliť konkrétne embedy tam, kde sú potrebné.

Čo uzamknúť nedokáže

Tu tímy niekedy schopnosti hlavičky preceňujú.

Permissions-Policy nenahrádza content security policy. Nerozhoduje o tom, ktoré skripty sa môžu načítať. Nezabráni skriptu odosielať dáta cez sieť. Nesanituje HTML. Nezabráni XSS. Neblokuje spam vo formulároch. Ak je problémom zneužívanie formulárov, začnite mechanikami opísanými v článku prečo je váš kontaktný formulár vašou najväčšou spamovou zodpovednosťou, nie touto hlavičkou.

Nenahrádza ani správu cookies. Cookies, local storage, súhlas, embedy tretích strán a ochrany prehliadačov proti sledovaniu sú samostatné témy. Ak kontrolujete ochranu súkromia širšie, prostredie cookies si zaslúži vlastný prechod; praktické zmeny pokrýva článok čo sa zmenilo pri cookies v roku 2026 a čo s tým robiť.

Najdôležitejšie je, že Permissions-Policy neurobí JavaScript tretích strán súkromným. Ak načítate skript tretej strany do svojej stránky prvej strany, vo všeobecnosti beží s oprávneniami vašej stránky, s prihliadnutím na ďalšie obmedzenia prehliadača a vaše bezpečnostné hlavičky. Zakázať prístup ku kamere je dobré. Nezabráni to však takému skriptu čítať obsah DOM, sledovať akcie používateľa alebo vykonávať povolené sieťové požiadavky.

Na to potrebujete iné kontroly: opatrný výber dodávateľov, CSP, sandboxed iframes, Subresource Integrity tam, kde sa hodí, minimalizáciu dát a nudné, no nevyhnutné revízie.

Rozumná predvolená politika

Neexistuje univerzálna hlavička, ktorá by sedela každému webu, ale väčšina obsahových a marketingových webov môže začať reštriktívne.

Rozumný prvý pokus:

Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=(), usb=(), bluetooth=(), accelerometer=(), gyroscope=(), magnetometer=(), screen-wake-lock=()

Potom pridajte späť iba to, čo web skutočne používa.

Napríklad:

  • Obchod používajúci Payment Request API môže potrebovať payment=(self).
  • Vyhľadávač pobočiek môže potrebovať geolocation=(self) alebo dôveryhodný mapový origin.
  • Konferenčná aplikácia môže potrebovať camera=(self) a microphone=(self).
  • Web s množstvom videí môže potrebovať fullscreen=(self "https://trusted-video.example").

Dôležité je neskopírovať obrovskú politiku zo zoznamu kontrol a nepovažovať to za hotové. Začnite inventárom funkcií. Ktoré stránky potrebujú ktoré schopnosti prehliadača? Ktoré embedy potrebujú delegovanie? Ktoré funkcie by boli prekvapivé, keby o ne niečo požiadalo?

Ako nasadiť bez rozbitia vecí

Zaveďte to ako každú inú produkčnú hlavičku: premyslene.

1. Zmapujte používanie funkcií

Prehľadajte kódovú bázu na volania API prehliadača, ako sú getUserMedia, geolocation, requestFullscreen, PaymentRequest, Web Bluetooth, WebUSB a wake lock APIs.

Potom skontrolujte embedy tretích strán. Dokumentácia poskytovateľov videa, máp, platieb a identity často uvádza požadované hodnoty iframe allow.

2. Začnite v prostredí s nízkym rizikom

Pridajte reštriktívnu hlavičku v stagingu a otestujte kľúčové používateľské cesty. Všímajte si správy v konzole prehliadača. Prehliadače často hlásia, keď je funkcia zablokovaná politikou permissions policy.

3. Tam, kde treba, používajte politiky špecifické pre stránku

Nenúťte jednu globálnu politiku, ak má váš produkt veľmi odlišné typy stránok. Blog, checkout, stránka s mapou a video miestnosť pravdepodobne potrebujú odlišné schopnosti.

Väčšina webových serverov, frameworkov a edge platforiem vie nastavovať hlavičky podmienene podľa cesty. To je často čistejšie než oslabiť celý web kvôli jednej funkcii.

4. Overte skutočnú odpoveď

Hlavičky môžu byť pridané, prepísané, duplikované alebo odstránené CDN, reverznými proxy, aplikačnými servermi a middleware. Skontrolujte finálnu odpoveď v browser DevTools alebo pomocou nástrojov príkazového riadka.

Otestujte aj vložené kontexty. To, že top-level stránka vyzerá správne, nezaručuje, že iframe dostal delegovanie, ktoré ste zamýšľali.

5. Dokumentujte výnimky

Každá povolená funkcia by mala mať vlastníka a dôvod. Znie to byrokraticky až do chvíle o šesť mesiacov neskôr, keď si nikto nepamätá, prečo bola geolocation otvorená pre doménu dodávateľa, ktorá sa už na stránke neobjavuje.

Bežné syntaktické chyby

Moderná syntax hlavičky je kompaktná, ale ľahko sa v nej dá mierne pomýliť.

Na zakázanie funkcie použite prázdne zátvorky:

Permissions-Policy: microphone=()

Pre aktuálny origin použite self:

Permissions-Policy: geolocation=(self)

Pre konkrétne externé originy použite originy v úvodzovkách:

Permissions-Policy: fullscreen=(self "https://video.example")

Nespoliehajte sa na staré príklady Feature-Policy, pokiaľ zámerne nepodporujete legacy správanie. Staršia hlavička používala inú syntax a nie je tým, okolo čoho by ste dnes mali návrh stavať.

Pamätajte tiež, že podpora prehliadačov sa líši podľa direktívy. Prehliadač môže podporovať hlavičku, ale nie konkrétnu direktívu funkcie. To je normálne. Berte hlavičku ako opatrenie defense-in-depth, nie ako svoju jedinú kontrolu súkromia alebo bezpečnosti.

<!-- tool-cta:start -->

💡 Vyskúšajte toto: Overte, či sa vaša Permissions-Policy doručuje podľa zámeru, pomocou Get Headers, ktorý zobrazuje surové hlavičky odpovede odosielané vaším serverom.

<!-- tool-cta:end -->

Praktická hodnota pre súkromie

Hodnota Permissions-Policy pre súkromie nespočíva v tom, že web urobí anonymným alebo bez trackerov. Neurobí.

Jej hodnota spočíva v zúžení prístupu k citlivým schopnostiam prehliadača. Poloha, kamera, mikrofón, senzory zariadenia, API lokálneho hardvéru a platobné toky sú výkonné. Väčšina stránok ich nepotrebuje. Mnohé vložené komponenty by nikdy nemali mať možnosť o ne žiadať.

To je skutočné zlepšenie. Znižuje počet náhodných výziev, obmedzuje zbytočné vystavenie schopností a dáva vášmu tímu konkrétny artefakt na kontrolu pri vydávaní novej funkcionality.

Najlepšia verzia tejto hlavičky je nudná: predvolene reštriktívna, uvoľnená iba tam, kde to vyžaduje funkcia viditeľná pre používateľa, a testovaná ako súčasť bežného release procesu.

Často kladené otázky

Je Permissions-Policy to isté ako Feature-Policy?
Nie. Permissions-Policy je moderná náhrada staršej hlavičky Feature-Policy. Niektoré staršie články a úryvky stále používajú syntax Feature-Policy, ale nové implementácie by mali používať Permissions-Policy.
Dokáže Permissions-Policy zastaviť sledovanie tretími stranami?
Sama o sebe nie. Môže zablokovať prístup k určitým funkciám prehliadača, ale nezastaví načítavanie skriptov, nastavovanie cookies tam, kde sú povolené, čítanie obsahu stránky ani odosielanie sieťových požiadaviek. Používajte ju spolu s CSP, kontrolami súhlasu, minimalizáciou dát a starostlivou správou dodávateľov.
Mal by každý web zakázať kameru a mikrofón?
Väčšina webov áno. Ak váš web neposkytuje nahrávanie videa, konferencie, overenie identity alebo inú funkciu, ktorá jasne potrebuje zachytávanie médií, zakázanie kamery a mikrofónu je rozumné predvolené nastavenie.
Môže atribút iframe allow prepísať hlavičku?
Nie. Politika nadradeného dokumentu nastavuje horný limit. Atribút iframe allow môže delegovať funkciu iba vtedy, ak nadradená politika túto funkciu pre origin rámca povoľuje.
Rozbijú nepodporované direktívy staré prehliadače?
Vo všeobecnosti sa nepodporované direktívy ignorujú. Napriek tomu by ste mali otestovať dôležité používateľské cesty vo všetkých podporovaných prehliadačoch, pretože správanie jednotlivých API a hlásenia v konzole sa môžu líšiť.

Zdroje a ďalšie čítanie

  1. MDN Web Docs: Permissions-Policy header
  2. W3C: Permissions Policy specification
  3. web.dev: Permissions Policy
  4. Chrome Developers: Controlling browser features with Permissions Policy
O autorovi
The Wux Webtools Team

Posledná aktualizácia:

Pokračujte v čítaní