IframePolicy
in package
iframe のホスト whitelist と、ホストごとの capability 許可リスト(allow / sandbox)を表す値オブジェクト。
config(1行1ホストのパイプ区切り host[|allow[|sandbox]])を正規化して保持し、
src からホストを解決して「そのホストで編集者が要求できる capability の上限(許可リスト)」を持つ。
実際に付与される値は、編集者が iframe に書いた allow / sandbox のうち、この許可リストに
含まれるトークンだけを残したもの(フィルタ)で、IframePolicyTransform を通じて付与される。
許可リストに無いトークンは常に落ち、編集者が何も書かなければ何も付与されない(最小権限)。
Table of Contents
Constants
- ALLOWED_FEATURES = ['accelerometer', 'autoplay', 'camera', 'clipboard-read', 'clipboard-write', 'display-capture', 'encrypted-media', 'fullscreen', 'geolocation', 'gyroscope', 'magnetometer', 'microphone', 'midi', 'payment', 'picture-in-picture', 'screen-wake-lock', 'web-share', 'xr-spatial-tracking']
- 許可する Permissions-Policy 機能トークン(allow 属性)。 config で指定された未知トークンはここで弾く(ポリシー外の付与を防ぐ)。
- ALLOWED_SANDBOX_TOKENS = ['allow-downloads', 'allow-forms', 'allow-modals', 'allow-orientation-lock', 'allow-pointer-lock', 'allow-popups', 'allow-popups-to-escape-sandbox', 'allow-presentation', 'allow-same-origin', 'allow-scripts', 'allow-storage-access-by-user-activation', 'allow-top-navigation', 'allow-top-navigation-by-user-activation', 'allow-top-navigation-to-custom-protocols']
- 許可する sandbox トークン。config で指定された未知トークンはここで弾く。
- CACHE_VERSION = 1
- キャッシュ世代。属性定義・ポリシー解釈の実装を変更したときに増やすと HTML.DefinitionRev が変わり、HTMLPurifier のキャッシュが再生成される。
Properties
-
$entries
: array<int, array{host: string, allow: list
, sandbox: list }> - 正規化済みのホストポリシー。
Methods
- __construct() : mixed
- fromConfig() : self
- config の `html_purifier_iframe_allowed_hosts` からポリシーを生成する。
- fromLines() : self
- 1行1ホストのパイプ区切り定義からポリシーを生成する。
- hosts() : array<int, string>
- 許可ホスト名の一覧(URI.SafeIframeRegexp 生成に用いる)。
- isEnabled() : bool
- iframe の許可(ホストが1つ以上ある)か。
- resolveAllow() : string|null
- src にマッチするホストの許可リストで、編集者が要求した allow をフィルタする。
- resolveSandbox() : string|null
- src にマッチするホストの許可リストで、編集者が要求した sandbox をフィルタする。
- revision() : int
- ポリシー内容から決定的に算出する整数リビジョン。 HTML.DefinitionRev に用い、ポリシー変更時にキャッシュを再生成させる。
- filterTokens() : array<int, string>
- 区切り文字で分割したトークンのうち、許可リストに含まれるものだけを返す。
-
resolve()
: array{host: string, allow: list
, sandbox: list }|null - src にマッチする最初のホストポリシーを返す。
Constants
ALLOWED_FEATURES
許可する Permissions-Policy 機能トークン(allow 属性)。 config で指定された未知トークンはここで弾く(ポリシー外の付与を防ぐ)。
private
array<string|int, string>
ALLOWED_FEATURES
= ['accelerometer', 'autoplay', 'camera', 'clipboard-read', 'clipboard-write', 'display-capture', 'encrypted-media', 'fullscreen', 'geolocation', 'gyroscope', 'magnetometer', 'microphone', 'midi', 'payment', 'picture-in-picture', 'screen-wake-lock', 'web-share', 'xr-spatial-tracking']
ALLOWED_SANDBOX_TOKENS
許可する sandbox トークン。config で指定された未知トークンはここで弾く。
private
array<string|int, string>
ALLOWED_SANDBOX_TOKENS
= ['allow-downloads', 'allow-forms', 'allow-modals', 'allow-orientation-lock', 'allow-pointer-lock', 'allow-popups', 'allow-popups-to-escape-sandbox', 'allow-presentation', 'allow-same-origin', 'allow-scripts', 'allow-storage-access-by-user-activation', 'allow-top-navigation', 'allow-top-navigation-by-user-activation', 'allow-top-navigation-to-custom-protocols']
CACHE_VERSION
キャッシュ世代。属性定義・ポリシー解釈の実装を変更したときに増やすと HTML.DefinitionRev が変わり、HTMLPurifier のキャッシュが再生成される。
private
mixed
CACHE_VERSION
= 1
Properties
$entries
正規化済みのホストポリシー。
private
array<int, array{host: string, allow: list, sandbox: list}>
$entries
Methods
__construct()
public
__construct(array<int, array{host: string, allow: list, sandbox: list}> $entries) : mixed
Parameters
-
$entries
: array<int, array{host: string, allow: list
, sandbox: list }>
fromConfig()
config の `html_purifier_iframe_allowed_hosts` からポリシーを生成する。
public
static fromConfig() : self
Return values
selffromLines()
1行1ホストのパイプ区切り定義からポリシーを生成する。
public
static fromLines(array<string|int, mixed> $lines) : self
書式: host[|allow[|sandbox]]
- allow: セミコロン区切りの Permissions-Policy 機能トークン(例:
fullscreen; encrypted-media) - sandbox: スペース区切りの sandbox トークン(例:
allow-scripts allow-same-origin)
Parameters
- $lines : array<string|int, mixed>
Return values
selfhosts()
許可ホスト名の一覧(URI.SafeIframeRegexp 生成に用いる)。
public
hosts() : array<int, string>
Return values
array<int, string>isEnabled()
iframe の許可(ホストが1つ以上ある)か。
public
isEnabled() : bool
Return values
boolresolveAllow()
src にマッチするホストの許可リストで、編集者が要求した allow をフィルタする。
public
resolveAllow(string $src, string $rawAllow) : string|null
Parameters
- $src : string
-
iframe の src
- $rawAllow : string
-
編集者が iframe に書いた allow の生値(セミコロン区切り)
Return values
string|null —付与する allow 値(要求が無い/全て許可リスト外なら null)
resolveSandbox()
src にマッチするホストの許可リストで、編集者が要求した sandbox をフィルタする。
public
resolveSandbox(string $src, string $rawSandbox) : string|null
Parameters
- $src : string
-
iframe の src
- $rawSandbox : string
-
編集者が iframe に書いた sandbox の生値(スペース区切り)
Return values
string|null —付与する sandbox 値(要求が無い/全て許可リスト外なら null)
revision()
ポリシー内容から決定的に算出する整数リビジョン。 HTML.DefinitionRev に用い、ポリシー変更時にキャッシュを再生成させる。
public
revision() : int
Return values
intfilterTokens()
区切り文字で分割したトークンのうち、許可リストに含まれるものだけを返す。
private
static filterTokens(string $raw, non-empty-string $delimiter, array<string|int, string> $allowedTokens) : array<int, string>
Parameters
- $raw : string
- $delimiter : non-empty-string
- $allowedTokens : array<string|int, string>
Return values
array<int, string>resolve()
src にマッチする最初のホストポリシーを返す。
private
resolve(string $src) : array{host: string, allow: list, sandbox: list}|null
Parameters
- $src : string