Permissions-Policy 빌더
카메라·위치·마이크 등 브라우저 기능 권한을 골라 Permissions-Policy 헤더를 생성합니다.
Permissions-Policy(이전 Feature-Policy) 헤더는 카메라·마이크·위치정보 같은 브라우저 강력 기능을 어떤 출처(origin)에서 사용할 수 있는지 제어합니다. 기본적으로 모든 기능을 차단해 두고 정말 필요한 곳만 허용하면, 서드파티 스크립트나 iframe이 사용자 동의 없이 민감한 기능을 호출하는 위험을 크게 줄일 수 있습니다.
이 빌더는 카메라·마이크·위치·결제·USB 등 12개 기능을 각각 차단/자기 출처만/모든 출처 중에서 선택해 완성된 Permissions-Policy 헤더 문자열을 즉시 만들어 줍니다. 콘텐츠 보안 정책까지 함께 설계하려면 CSP 생성기를, 적용 후 실제 응답 헤더를 점검하려면 보안 헤더 점검을 이어서 사용하세요.
각 브라우저 기능을 차단·자기 출처·모든 출처 중에서 선택하세요.
cameramicrophonegeolocationfullscreenpaymentusbautoplayaccelerometergyroscopemagnetometerdisplay-captureclipboard-writePermissions-Policy: camera=(), microphone=(), geolocation=(), fullscreen=(self), payment=(), usb=(), autoplay=(self), accelerometer=(), gyroscope=(), magnetometer=(), display-capture=(), clipboard-write=()
사용하지 않는 기능은 차단()으로 두는 것이 안전합니다.
허용 목록(allowlist) 문법
각 기능 뒤의 괄호는 그 기능을 사용할 수 있는 출처 목록을 의미합니다. 이 빌더는 세 가지 대표 설정을 제공합니다.
()— 빈 목록. 자기 자신을 포함해 모든 출처에서 기능을 완전히 차단합니다.(self)— 같은 출처(동일 origin)에서만 허용하고, 서드파티 iframe에는 차단합니다.*— 모든 출처에서 허용합니다. 가장 느슨하므로 꼭 필요할 때만 사용하세요.
적용 예시
예를 들어 카메라·마이크·위치를 모두 차단하고 전체화면만 자기 출처에 허용하려면 헤더는 다음과 같습니다.
Permissions-Policy: camera=(), microphone=(), geolocation=(), fullscreen=(self)
헤더는 nginx·Apache 등 웹 서버나 CDN 응답 헤더, 또는 Next.js의 headers() 설정에 추가합니다. 기능을 명시하지 않으면 브라우저 기본값(대개 허용)이 적용되므로, 보안을 위해서는 사용하지 않는 기능도()로 명시해 차단하는 편이 안전합니다.
기능별 권장 기본값 표
대부분의 사이트에서 출발점으로 삼을 만한 권장 설정입니다. 해당 기능을 실제로 쓰지 않는다면 모두 ()로 막아 두고, 필요한 기능만 하나씩 풀어 주는 “기본 차단(deny by default)” 방식을 권장합니다.
| 기능 | 권장 기본값 | 예시 지시문 |
|---|---|---|
| 카메라(camera) | 필요 없으면 차단 () | camera=() |
| 마이크(microphone) | 필요 없으면 차단 () | microphone=() |
| 위치정보(geolocation) | 쓴다면 자기 출처 (self) | geolocation=(self) |
| 전체화면(fullscreen) | 자기 출처 (self) | fullscreen=(self) |
| 결제(payment) | Payment Request 미사용 시 차단 () | payment=() |
| USB(usb) | 차단 () | usb=() |
| 자동재생(autoplay) | 자기 출처 (self) | autoplay=(self) |
| 화면공유(display-capture) | 차단 () | display-capture=() |
실전 예시: 미디어를 임베드하지 않는 사이트
블로그나 회사 소개처럼 카메라·마이크·위치·결제를 전혀 쓰지 않는 정적 사이트를 가정해 봅시다. 이런 경우 민감 기능을 모두 빈 목록 ()으로 막아 두는 것이 가장 안전합니다.
- 입력(의도): 모든 강력 기능을 사용하지 않으므로 전부 차단한다.
- 생성 헤더:
Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=() - 해석:
()는 자기 자신을 포함한 모든 출처에서 완전 차단이고,(self)는 같은 출처에서만 허용(서드파티 iframe은 차단),*는 모든 출처 허용입니다.
위 헤더가 적용되면 페이지에 몰래 심어진 광고 iframe이나 서드파티 스크립트가 사용자의 카메라·마이크를 켜거나 위치를 읽으려 해도 브라우저가 호출 자체를 거부합니다. 나중에 화상 상담 기능을 추가하게 되면 그때camera=(self)처럼 해당 기능만 자기 출처로 풀어 주면 됩니다. 적용 후에는 보안 헤더 점검으로 실제 응답에 헤더가 잘 실렸는지 확인하세요.