OneWebDesk

Permissions-Policy 빌더

카메라·위치·마이크 등 브라우저 기능 권한을 골라 Permissions-Policy 헤더를 생성합니다.

Permissions-Policy(이전 Feature-Policy) 헤더는 카메라·마이크·위치정보 같은 브라우저 강력 기능을 어떤 출처(origin)에서 사용할 수 있는지 제어합니다. 기본적으로 모든 기능을 차단해 두고 정말 필요한 곳만 허용하면, 서드파티 스크립트나 iframe이 사용자 동의 없이 민감한 기능을 호출하는 위험을 크게 줄일 수 있습니다.

이 빌더는 카메라·마이크·위치·결제·USB 등 12개 기능을 각각 차단/자기 출처만/모든 출처 중에서 선택해 완성된 Permissions-Policy 헤더 문자열을 즉시 만들어 줍니다. 콘텐츠 보안 정책까지 함께 설계하려면 CSP 생성기를, 적용 후 실제 응답 헤더를 점검하려면 보안 헤더 점검을 이어서 사용하세요.

기능별 정책 선택

각 브라우저 기능을 차단·자기 출처·모든 출처 중에서 선택하세요.

camera
microphone
geolocation
fullscreen
payment
usb
autoplay
accelerometer
gyroscope
magnetometer
display-capture
clipboard-write
생성된 헤더
Permissions-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)처럼 해당 기능만 자기 출처로 풀어 주면 됩니다. 적용 후에는 보안 헤더 점검으로 실제 응답에 헤더가 잘 실렸는지 확인하세요.

자주 묻는 질문

Permissions-Policy와 Feature-Policy는 무엇이 다른가요?
Permissions-Policy는 옛 Feature-Policy 헤더를 대체한 표준입니다. 문법이 바뀌어 allowlist를 괄호와 공백으로 표현하며, 최신 브라우저는 Permissions-Policy를 사용합니다. 구형 호환이 꼭 필요할 때만 Feature-Policy를 병행하세요.
(self)와 *의 차이가 헷갈립니다.
(self)는 헤더를 보낸 사이트 자신(같은 origin)에서만 기능을 쓸 수 있게 합니다. *는 페이지에 포함된 모든 서드파티 iframe까지 포함해 모든 출처에 허용합니다. 결제·카메라 같은 민감 기능은 *를 피하세요.
기능을 아예 적지 않으면 어떻게 되나요?
헤더에 명시하지 않은 기능은 브라우저 기본 정책을 따르며 대개 동일 출처에 허용됩니다. 명확한 차단을 원하면 사용하지 않는 기능도 ()로 적어 두는 것이 안전합니다.
특정 도메인만 허용할 수도 있나요?
표준 문법은 camera=(self "https://example.com")처럼 출처 URL 목록을 지원합니다. 이 빌더는 가장 흔한 세 가지(차단·자기 출처·모든 출처)만 빠르게 만들어 주며, 필요하면 결과 문자열을 직접 편집해 도메인을 추가할 수 있습니다.
입력한 값이 서버로 전송되나요?
아니요. 모든 선택과 헤더 생성은 브라우저 안에서만 처리되며, 선택한 정책 값은 어디로도 전송되거나 저장되지 않습니다.

관련 도구

웹 보안