Copyright © 2025 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
이 명세는 다른 명세들이 브라우저 권한과 상호작용할 때 사용할 수 있는 공통 인프라를 정의합니다. 이 권한들은 사용자가 플랫폼의 "강력한 기능"에 대한 접근을 허용하거나 거부하는 선택을 나타냅니다. 개발자를 위해, 이 명세는 강력한 기능의 권한 상태를 조회하고, 해당 권한이 변경될 때 알림을 받을 수 있는 API를 표준화합니다.
이 섹션은 본 문서가 공개된 시점의 상태를 설명합니다. 현재 W3C 출판물 목록과 이 기술 보고서의 최신 개정본은 W3C 표준 및 초안 색인 (https://www.w3.org/TR/)에서 확인할 수 있습니다.
이 문서는 작업 중입니다.
이 문서는 웹 애플리케이션 보안 작업 그룹에서 권고안 트랙을 사용하여 작업 초안으로 발행되었습니다.
작업 초안으로 발행된 것은 W3C 및 회원의 지지를 의미하지 않습니다.
이 문서는 초안이며 언제든지 업데이트, 대체, 또는 폐기될 수 있습니다. 이 문서를 진행 중인 작업 이외의 것으로 인용하는 것은 부적절합니다.
이 문서는 W3C 특허 정책에 따라 운영되는 그룹에 의해 작성되었습니다. W3C는 공개 특허 공개 목록을 유지합니다. 이 목록에는 그룹 산출물과 관련하여 제출된 특허 공개가 있으며, 특허 공개 방법에 대한 지침도 포함되어 있습니다. 개인이 특정 특허가 필수 청구항을 포함한다고 판단할 경우, W3C 특허 정책 6절에 따라 정보를 공개해야 합니다.
이 문서는 2023년 11월 3일 W3C 프로세스 문서를 따릅니다.
이 섹션은 규범적이지 않습니다.
명세는 강력한 기능으로 명확하게 식별되는 기능을 정의할 수 있습니다. 이러한 기능은 개인정보 보호, 보안, 성능에 중요한 영향을 미칠 수 있으므로 "강력하다"고 합니다. 따라서 사용자는 사용자 에이전트가 명시적 권한을 주기 전까지 사이트가 이러한 기능을 사용할 수 없도록 막아주기를 기대하며, 일반적으로 이 권한은 제한된 기간 동안만 부여됩니다. 사이트가 강력한 기능을 사용하도록 허용하는 명시적 권한은 일반적으로 아래 그림과 같이 브라우저 UI를 통해 제공되고 제어됩니다.
이 의미에서 권한은 특정 유형의 기능, 특히 "강력한 기능"에 대한 사용자 동의의 현재 상태를 나타냅니다. 궁극적으로 사용자는 이러한 권한을 직접 제어할 수 있으며, 사용자 환경설정을 통해 수동으로 권한을 부여하거나 거부할 수 있습니다. 또한 사용자 에이전트는 사용자가 권한을 관리할 수 있도록, 예를 들어 귀찮은 프롬프트를 숨기거나 자동으로 거부하고, 사용자가 일정 기간 사이트를 방문하지 않을 경우 부여된 권한을 자동으로 만료시키는 등의 도움을 제공합니다.
이 섹션은 규범적이지 않습니다.
이 예시는 Permissions API를 사용해 지역 뉴스를 Geolocation API로 보여줄지, 기능을 추가할 수 있는 버튼을 보여줄지 결정합니다.
const { state } = await navigator.permissions.query({
name: "geolocation"
});
switch (state) {
case "granted":
showLocalNewsWithGeolocation();
break;
case "prompt":
showButtonToEnableLocalNews();
break;
case "denied":
showNationalNews();
break;
}
이 예시는 "geolocation"
과 "notifications"
강력한 기능의 상태를 동시에 확인합니다:
const queryPromises = ["geolocation", "notifications"].map(
name => navigator.permissions.query({ name })
);
for await (const status of queryPromises) {
console.log(`${status.name}: ${status.state}`);
}
이 예시는 사용 가능한 카메라의 권한 상태를 확인합니다.
const devices = await navigator.mediaDevices.enumerateDevices();
// 비디오 입력만 필터링하고 쿼리 객체로 매핑
const queries = devices
.filter(({ kind }) => kind === "videoinput")
.map(({ deviceId }) => ({ name: "camera", deviceId }));
const promises = queries.map((queryObj) =>
navigator.permissions.query(queryObj)
);
try {
const results = await Promise.all(promises);
// 각 카메라의 상태를 로그로 출력
results.forEach(({ state }, i) => console.log("Camera", i, state));
} catch (error) {
console.error(error);
}
이 섹션은 웹 플랫폼에서 권한을 사용하여 강력한 기능을 제어하는 모델을 정의합니다.
권한은 사용자가 웹 애플리케이션에 강력한 기능을 사용할 수 있도록 허용하는 결정을 나타냅니다. 이 결정은 권한의 상태로 표현됩니다.
명시적 권한은 사용자가 웹 애플리케이션에 권한을 부여하여 강력한 기능을 사용할 수 있게 하는 것을 의미합니다.
개념적으로, 강력한 기능에 대한 권한은 다음 상태 중 하나일 수 있습니다:
사용자의 의도에 대한 새로운 정보를 파악하기 위해, 사용자 에이전트는 사용자의 의도에 대한 정보를 수집 및 해석할 수 있습니다(MAY). 이 정보는 명시적 사용자 행동, 해당 사용자 및 다른 사용자의 집계 행동, 또는 이 명세에서 예상하지 못한 암묵적 신호에서 올 수 있습니다.
모든 권한은 수명을 가집니다. 이는 특정 권한이 "granted" 상태를 유지하다가 기본 상태로 되돌아가기까지 지속되는 기간입니다. 수명은 특정 Realm 이 소멸될 때까지, 특정 최상위 브라우징 컨텍스트가 소멸될 때까지, 일정 시간 동안 또는 무기한일 수 있습니다. 수명은 사용자가 명시적 권한을 부여할 때 사용자와 사용자 에이전트 사이에 결정되며, 일반적으로 권한 UI나 사용자 에이전트 정책을 통해 협의됩니다.
모든 권한은 기본 상태(보통 "prompt")를 가지며, 이는 사용자가 해당 명시적 권한을 부여하지 않았거나 수명이 만료되어 리셋된 상태입니다.
사용자 에이전트는 하나의 권한 저장소를 유지하며, 이는 목록 형태의 권한 저장소 엔트리들로 구성됩니다. 각 엔트리는 해당 descriptor와 key로 식별되며, 목록에 최대 한 번만 나타날 수 있습니다.
사용자 에이전트는 해당 엔트리의 권한 수명이 만료되면 엔트리 삭제를 할 수 있습니다.
권한 저장소 엔트리는 튜플이며,
PermissionDescriptor
descriptor, permission key key, 그리고 state state로 이루어져 있습니다.
PermissionDescriptor
descriptor와 permission
key
key를 받아 권한 저장소 엔트리 가져오기:
PermissionDescriptor
descriptor, permission
key key,
그리고 state state를 받아 권한
저장소 엔트리 설정하기:
PermissionDescriptor
descriptor와 permission
key
key를 받아 권한 저장소 엔트리 삭제하기:
권한 키는 기능의 권한 키 타입에 의해 타입이 정의됩니다.
권한 키 key1가 동등한지 확인하려면, 권한 키
key2와 PermissionDescriptor
descriptor를 받아 다음 단계 수행:
name
에 대해 실행하고,
key1과 key2를 전달하여 결과 반환
강력한 기능은 사용자가 명시적 권한을 부여해야만 사용할 수 있는 웹 플랫폼 기능(API 등)입니다. 몇몇 예외(예: 알림 API 현행 표준)를 제외하면 대부분의 강력한 기능은 정책 제어 기능이기도 합니다. 정책 제어 기능이기도 한 강력한 기능의 경우, [Permissions-Policy]가 문서가 해당 기능을 사용할 권한을 위임받았는지 제어합니다. 즉, 강력한 기능은 해당 정책 제어 기능을 통해 문서에 권한이 위임된 경우에만 사용자에게 명시적 권한을 요청할 수 있습니다(아래 예시 참고). 이후 해당 기능의 접근은 사용자가 "granted" 권한을 부여했는지, 또는 권한 부여와 동등한 기준을 만족하는지에 따라 결정됩니다.
강력한 기능은 이름(예: "geolocation")이라는 문자열 리터럴로 식별됩니다.
사용자 에이전트는 사용자가 강력한 기능을 사용할 권한을 가졌는지 환경 설정 객체를 통해 추적합니다.
각 강력한 기능은 추가 측면을 0개 이상 정의할 수
있습니다. 측면은 WebIDL dictionary로 정의되며,
상속을 통해 PermissionDescriptor
에서 파생되고, WebIDL
인터페이스의 권한 디스크립터 타입으로 사용됩니다.
적합한 명세가 강력한 기능을 명세화 할 때:
PermissionDescriptor
를 상속받습니다.
새로 명세된 강력한 기능을 권한 레지스트리에 등록하면, 작업 그룹이 피드백을 제공하고 본 명세와의 통합이 효과적으로 이루어졌는지 확인할 수 있습니다.
PermissionDescriptor
또는 그 하위 타입. 명시되지
않은 경우 기본값은 PermissionDescriptor
입니다.
기능은 디스크립터 인스턴스에 부분 순서를 정의할 수 있습니다.
descriptorA가 더 강하다면,
descriptorA의 권한 상태가 "granted
"이면 descriptorB의
권한 상태도 반드시 "granted
"여야 하며,
descriptorB의 권한 상태가 "denied
"이면 descriptorA의 권한 상태도 반드시 "denied
"여야 합니다.
일부 강력한 기능은 PermissionState
외에 추가 정보가 필요합니다. 이러한 기능 각각은
추가 권한 데이터 타입을 정의합니다.
예를 들어, getUserMedia
()
는 사용자가 어떤 카메라의 권한을 허용했는지 결정해야 합니다.
DOMString
name이 이러한 기능 중 하나를 지칭한다면, name의 추가 권한 데이터는
선택적 환경
설정 객체 settings와 함께 다음 알고리즘 결과입니다:
명시된 경우, 추가 권한 데이터 알고리즘은 해당 기능에 사용 가능합니다.
PermissionStatus
또는 그 하위 타입. 명시되지 않은 경우 기본값은 PermissionStatus
입니다.
권한 디스크립터 타입 인스턴스와 새 또는 기존 권한 결과 타입 인스턴스를 받아, 권한 결과 타입 인스턴스를 쿼리 결과로 업데이트합니다. 이는 Permissions
의 query
(permissionDesc)
메서드 및 PermissionStatus
업데이트 단계에서
사용됩니다. 명시하지 않으면 기본 권한 쿼리 알고리즘이
기본값입니다.
기본 권한 쿼리 알고리즘은, PermissionDescriptor
permissionDesc와 PermissionStatus
status를 받아 다음 단계 실행:
해당 기능에서 사용하는 권한 키의 타입. 기본값은 오리진입니다. 사용자 지정 권한 키 타입을 지정하는 기능은 반드시 권한 키 생성 알고리즘도 지정해야 합니다.
환경 설정 객체를 받아, 새로운 권한 키를 반환합니다. 명시하지 않으면 기본 권한 키 생성 알고리즘이 기본값입니다. 사용자 지정 권한 키 생성 알고리즘을 명세하는 기능은 반드시 권한 키 비교 알고리즘도 지정해야 합니다.
두 권한 키를 받아 두 키가 동일한지 여부를 반환하는 boolean입니다. 명시하지 않으면 기본 권한 키 비교 알고리즘이 기본값입니다.
기본 권한 키 비교 알고리즘은, 권한 키 key1와 key2를 받아 다음 단계 실행:
인자를 받지 않으며, 권한 상태나 추가 권한 데이터의 변경에 따라 동기화해야 할 구현의 다른 부분을 업데이트합니다.
명시하지 않으면 사용자가 권한을 철회할 때 반응 알고리즘을 실행하는 것이 기본값입니다.
하나 이상의 강력한 기능을 정의하는 명세는 해당 기능에 가장 적합한 권한 수명을 제안해야 합니다(권장). 권한 수명 결정에 대한 안내는 아래에 있으며, 사용자 개인정보를 특히 강조합니다. 수명이 명시되지 않으면, 사용자 에이전트가 제공합니다.
오리진에 대한 권한 수명이 만료되면:
PermissionState
값으로, 권한의 기본 상태로 사용됩니다.
기본 강력한 기능은 위의 모든 타입과 알고리즘을 기본값으로 지정한 강력한 기능입니다.
현재 권한 상태 가져오기 알고리즘은 name name과 선택적
환경 설정
객체 settings를 받아 다음 단계를 실행합니다. 이 알고리즘은 PermissionState
열거형 값을 반환합니다.
PermissionDescriptor
로 하며,
name
을 name으로
초기화합니다.
descriptor의 권한 상태 알고리즘은 선택적
환경 설정
객체 settings를 받아 다음 단계를 실행합니다.
PermissionState
열거형 값을 반환합니다:
denied
" 반환.
name
으로 설정.
Document
를 가진다면:
Document
로 설정.
denied
" 반환.
PermissionState
열거형
값을 반환.
PermissionState
열거형 값을 반환하며,
descriptor의 name
에 대한 권한 상태 제약을 고려.
약칭으로, DOMString
name의 권한 상태는 PermissionDescriptor
의 name
을 name으로 설정한 경우의 권한 상태입니다.
사용 권한
요청 알고리즘은 descriptor에 대해 다음 단계를 실행합니다. 이 알고리즘은
"granted
" 또는 "denied
"를 반환합니다.
prompt
"가 아니면,
current state를 반환하고 단계 중단.
granted
"로, 아니면 "denied
"로 설정. 사용자의 상호작용은 해당 오리진에 대한 사용자 의도에 대한 새로운 정보를 제공할 수 있음.
이 알고리즘은 권한 UI 세부사항 및 사용자 에이전트가 사용자 의도를 추론하는 방법에 대해 일부러 모호하게 기술되어 있습니다. 사용자 에이전트는 이 프레임워크 내에서 다양한 UI 구현을 탐구할 수 있습니다.
약칭으로, 사용 권한 요청 알고리즘을 DOMString
name에 대해 실행하는 것은,
해당 PermissionDescriptor
의
name
을 name으로 설정한 것과 동일합니다.
사용자에게
선택 프롬프트 알고리즘은 특정 options와 descriptor, 선택적 boolean
allowMultiple(기본값 false)을 받아 다음 단계를 실행합니다. 이 알고리즘은 "denied
" 또는 사용자의 선택을 반환합니다.
denied
"이면,
"denied
" 반환하고 단계 중단.
granted
"라면,
사용자 에이전트는 사용자가 선택한 options 중 하나(또는 allowMultiple가
true면 여러 개)를 반환하고 단계 중단할 수 있습니다. 프롬프트 없이 반환한 경우, 이후 동일한 옵션 집합 및 동일 descriptor에 대해 선택 프롬프트를 다시 실행해도 동일한 선택을 반환해야 하며, 사용자 에이전트가
사용자 의도에 대한 새로운 정보를 받지 않은 경우에
한합니다.
denied
" 반환.
이 알고리즘은 권한 UI 세부사항 및 사용자 에이전트가 사용자 의도를 추론하는 방법에 대해 일부러 모호하게 기술되어 있습니다. 사용자 에이전트는 이 프레임워크 내에서 다양한 UI 구현을 탐구할 수 있습니다(예: 프롬프트가 타임아웃되어 사용자가 명시적으로 선택하지 않은 경우 "denied"를 자동 반환).
약칭으로, 선택 프롬프트를 DOMString
name에 연결된 옵션으로 실행하는 것은,
해당 PermissionDescriptor
의
name
을 name으로 설정한 경우의 선택
프롬프트와 동일합니다.
사용자 에이전트가 사용자가 PermissionDescriptor
descriptor로 설명되는 기능에 더 이상 권한을 부여할 의도가 없음을 알게 되면,
권한 철회에 반응 알고리즘을 다음 단계로 실행합니다:
name
에 해당하는
권한 철회 알고리즘 실행.
WebIDL[Exposed=(Window,Worker)]
interface Permissions
{
Promise<PermissionStatus
> query
(object permissionDesc);
};
dictionary PermissionDescriptor
{
required DOMString name
;
};
query()
메서드가 호출될 때, 사용자 에이전트는 반드시
아래 권한 쿼리 알고리즘을 permissionDesc와 함께
실행해야 합니다:
Window
객체라면:
Document
가 완전히
활성 상태가 아니면, 거부된 promise를
반환하며,
"InvalidStateError
"
DOMException
을
포함합니다.
PermissionDescriptor
.
name
"]
값이 지원되지 않으면, 거부된 promise를 TypeError
와
함께 반환.
name
에 해당하는 권한 디스크립터 타입의 IDL
값으로 변환.
PermissionStatus
생성 알고리즘으로 typedDescriptor와 함께 생성.
[[query]]
내부 슬롯 값으로 설정.
name
에 해당하는 권한 쿼리
알고리즘을 query와 status로 실행.
WebIDL[Exposed=(Window,Worker)]
interface PermissionStatus
: EventTarget {
readonly attribute PermissionState
state
;
readonly attribute DOMString name
;
attribute EventHandler onchange
;
};
enum PermissionState
{
"granted
",
"denied
",
"prompt
",
};
PermissionStatus
인스턴스는
[[query]] 내부 슬롯과 함께 생성되며,
이 슬롯은 기능의 권한 디스크립터 타입의 인스턴스입니다.
"granted
", "denied
", 그리고
"prompt
" 열거형 값은 각각 "granted", "denied", 그리고
"prompt" 개념을 나타냅니다.
PermissionStatus
생성 알고리즘은
주어진
PermissionDescriptor
permissionDesc에 대해 다음 단계를 실행합니다:
name
속성은 초기화된 값을 반환합니다.
state
속성은 현재 인스턴스에 설정된 최신 값을 반환합니다.
onchange
속성은 이벤트 핸들러이며,
이에 대응되는 이벤트 핸들러
이벤트 타입은 change
입니다.
사용자 에이전트가 PermissionStatus
인스턴스 status의 상태가 변경됨을 인지하면, 비동기로 PermissionStatus
업데이트 단계 알고리즘을 실행합니다:
PermissionStatus
객체는
change
타입의 이벤트 리스너가 있을 때 가비지 컬렉션되어서는 안 됩니다.
비규범적으로 표시된 섹션 외에도, 이 명세의 모든 작성 지침, 도표, 예시, 참고 사항은 비규범적입니다. 그 외 모든 내용은 규범적입니다.
이 문서에서 MAY, MUST, MUST NOT, OPTIONAL, SHOULD 와 같은 키워드는 BCP 14 [RFC2119] [RFC8174] 에서 설명된 대로, 이처럼 모두 대문자로 표기될 때에만 해당 의미로 해석되어야 합니다.
이 명세에 적합성을 주장할 수 있는 제품의 유형은 두 가지입니다: 사용자 에이전트와 기타 명세(즉, 이 명세의 요구사항을 준수하는 방식으로 강력한 기능을 명세화하는 기술 보고서).
이 섹션은 규범적이지 않습니다.
이 명세와 Permissions Policy 명세 모두 "권한"을 다루지만, 각 명세는 플랫폼에서 고유한 목적을 가지고 있습니다. 하지만 두 명세는 명확히 겹치는 부분이 있습니다.
한편, 이 명세는 강력한 기능의 접근을 사용자 에이전트가 중재하는 권한 UI를 통해 관리하는 것에만 집중합니다(즉, 사용자가 해당 기능을 사용하기 전에 명시적 동의를 제공하고, 언제든지 그 권한을 거부할 수 있는 기능). 이러한 강력한 기능은 권한 레지스트리에 등록됩니다.
반면, Permissions Policy 명세는 개발자가 "permissions
policy"(HTTP 헤더나
allow
속성 등)을 통해 정책 제어 기능을 선택적으로 활성화 또는 비활성화할 수 있도록 합니다. 이 의미에서 Permissions Policy는 이 명세를 포괄하며, Permissions Policy가 기능의 사용 가능 여부를 완전히
결정할 수 있습니다. 이러한 정책 제어 기능 역시 권한 레지스트리에 등록됩니다.
Permissions Policy 명세에 의해 비활성화된 강력한 기능은 항상 이 명세 상에서 권한 상태가 "denied"로 반영됩니다. 이는 현재 권한 상태 읽기가 [HTML]의 "allowed to use" 체크에 의존하고, 해당 체크가 Permissions Policy 명세를 참조하기 때문입니다. 여기서 중요한 것은 두 명세 모두 권한 이름을 공유한다는 점입니다. 권한 이름은 보통 같은 이름(예: 지오로케이션의 "geolocation" 등)으로 정의됩니다.
마지막으로, Permissions Policy 명세를 통해 강력한 기능이 "granted" 상태가 되는 것은 어떠한 방식으로도 불가능합니다. 강력한 기능이 "granted"가 되는 유일한 방법은 사용자가 명시적 권한을 부여하거나, 사용자 에이전트 정책에 의해 결정되는 경우뿐입니다.
사용자 에이전트 자동화 및 애플리케이션 테스트 목적을 위해, 본 문서는 [WebDriver] 및 [WebDriver-BiDi] 명세에 대한 확장 기능을 정의합니다. 사용자 에이전트가 이를 지원하는 것은 OPTIONAL입니다.
WebIDLdictionary PermissionSetParameters
{
required object descriptor
;
required PermissionState
state
;
};
권한 설정 알고리즘은 PermissionDescriptor
descriptor, PermissionState
state, 선택적 origin, 선택적 user agent를 받아 다음 단계를
실행합니다:
본 문서는 [WebDriver] 명세에 대한 확장 명령어를 아래와 같이 정의합니다.
HTTP 메서드 | URI 템플릿 |
---|---|
POST | /session/{session id}/permissions |
권한 설정
확장 명령어는
PermissionDescriptor
의
권한 상태를 사용자가 변경하는 것처럼 시뮬레이션합니다.
원격단 단계는 다음과 같습니다:
PermissionSetParameters
로 변환. 변환
중 예외가 발생하면 invalid argument error를 반환.
state
값이 구현 정의상 부적절한 권한 상태인 경우, invalid
argument error를 반환.
descriptor
값으로 설정.
name
") 결과에 맞춤. 변환 중 예외 발생 시 invalid argument error 반환.
state
로
실행.
null
반환.
본 문서는 [WebDriver-BiDi] 명세에 대한 확장 모듈을 아래와 같이 정의합니다.
permissions 모듈은 원격단 브라우저 권한 관리를 위한 명령어를 포함합니다.
{^remote end definition^}
PermissionsCommand = (
permissions.setPermission
)
permissions.PermissionDescriptor = {
name: text,
}
permissions.PermissionDescriptor
타입은 PermissionDescriptor
를 나타냅니다.
permissions.PermissionState = "granted" / "denied" / "prompt"
permissions.PermissionState
타입은 PermissionState
를 나타냅니다.
권한 설정 명령어는 PermissionDescriptor
의 권한 상태를 사용자가 변경하는 것처럼 시뮬레이션합니다.
permissions.setPermission = (
method: "permissions.setPermission",
params: permissions.SetPermissionParameters
)
permissions.SetPermissionParameters = {
descriptor: permissions.PermissionDescriptor,
state: permissions.PermissionState,
origin: text,
? userContext: text,
}
EmptyResult
원격단 단계는 session과 command parameters로 다음과 같이 실행합니다:
descriptor
필드 값으로
설정.
name
필드 값으로 설정하며,
name
을 나타냄.
state
필드 값으로 설정.
userContext
필드 값(있으면) 또는 default
로 설정.
PermissionSetParameters
의
permission
name에 해당하는 권한 디스크립터 타입. 변환 중 예외 발생 시 error와 error code invalid
argument 반환.
origin
필드 값으로 설정.
null
반환.
이 섹션은 규범적이지 않습니다.
이 W3C 레지스트리는 웹 플랫폼의 정책 제어 기능 및 강력한 기능을 중앙 집중식으로 확인할 수 있는 장소를 제공합니다. 변경 프로세스를 통해 플랫폼 내 권한이 여러 명세에 걸쳐 일관되게 명세되도록 돕습니다.
레지스트리를 표준화된 권한과 임시 권한으로 분리함으로써, 기능의 상태를 추적할 수 있는 방법을 제공합니다.
이 레지스트리에 추가/업데이트하는 변경 프로세스는 다음과 같습니다:
표준화된 권한 표에 등재되기 위해서는, 표준화된 권한 요건을 충족해야 합니다:
각 권한은 고유한 리터럴 문자열로 식별됩니다. Permissions Policy에서는 문자열이 정책 제어 기능을 식별합니다. Permissions 명세에서는 문자열이 강력한 기능을 식별합니다.
식별 문자열 | 정책 제어 기능 여부 | 강력한 기능 여부 | 명세 | 구현체 | ||
---|---|---|---|---|---|---|
Chromium | Gecko | WebKit | ||||
"geolocation" | YES | YES | 지오로케이션 | YES | YES | YES |
"notifications" | NO | YES | 알림 API 현행 표준 | YES | YES | YES |
"push" | NO | YES | Push API | YES | YES | YES |
"web-share" | YES | NO | 웹 공유 API | YES | YES | YES |
임시 권한은 아직 표준화된 권한이 아닌 권한(즉, 실험적이거나 인큐베이팅 단계, 또는 단일 브라우저 엔진에만 구현됨)입니다.
식별 문자열 | 정책 제어 기능 여부 | 강력한 기능 여부 | 명세 | 구현체 | ||
---|---|---|---|---|---|---|
Chromium | Gecko | WebKit | ||||
"accelerometer" | YES | YES | 디바이스 방향 및 모션 | YES | NO | NO |
"window-management" | YES | YES | 창 관리 | YES | NO | NO |
"local-fonts" | YES | YES | 로컬 폰트 접근 API | YES | NO | NO |
공격자는 권한 상태를 최종 사용자에 해당하는 "지문"을 생성하는 요소로 활용할 수 있습니다. 이미 공격자는 실제로 API를 사용하여 권한 상태를 확인할 수 있지만, 그 경우 권한이 이미 "허용됨(granted)" 상태가 아니면 UI 프롬프트가 사용자에게 표시되는 경우가 많습니다. 이 API가 웹사이트에 새로운 지문 정보(fingerprinting information)를 노출하지는 않지만, 공격자가 해당 정보를 조용히 더 쉽게 접근할 수 있도록 해줍니다.
사용자 에이전트는 권장됨(SHOULD) 사용자가 특정 강력한 기능과 연결된 오리진에 대한 권한 상태를 검토, 업데이트, 리셋할 수 있는 방법을 제공해야 합니다.
현재 문서화된 보안 고려사항은 없습니다. 대신, D. 개인정보 고려사항 섹션을 참고하시기 바랍니다.
WebIDL[Exposed=(Window)]
partial interface Navigator {
[SameObject] readonly attribute Permissions
permissions
;
};
[Exposed=(Worker)]
partial interface WorkerNavigator {
[SameObject] readonly attribute Permissions
permissions
;
};
[Exposed=(Window,Worker)]
interface Permissions
{
Promise<PermissionStatus
> query
(object permissionDesc);
};
dictionary PermissionDescriptor
{
required DOMString name
;
};
[Exposed=(Window,Worker)]
interface PermissionStatus
: EventTarget {
readonly attribute PermissionState
state
;
readonly attribute DOMString name
;
attribute EventHandler onchange
;
};
enum PermissionState
{
"granted
",
"denied
",
"prompt
",
};
dictionary PermissionSetParameters
{
required object descriptor
;
required PermissionState
state
;
};
이 섹션은 규범적이지 않습니다.
편집자들은 API 설계 및 편집 작업에 도움을 준 Adrienne Porter Felt, Anne van Kesteren, Domenic Denicola, Jake Archibald, Wendy Seltzer에게 감사를 표합니다.
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: