PurifierFactory
in package
a-blog cms 向けに設定済みの HTMLPurifier インスタンスを組み立てる。
既存の設定・ブロックエディタ用属性に加えて、iframe ホスト whitelist を扱う:
- dangerous_tags に 'iframe' が無ければ HTML.SafeIframe を常時有効化し、許可ホストがあれば URI.SafeIframeRegexp をセット (whitelist が空でも src は全て無効化され、iframe を素通りさせない)。'iframe' を明示した場合のみタグごと削除する
- 提示・無害な属性(loading / referrerpolicy / allowfullscreen)は型付き AttrDef で宣言(CDATA 素通しを避ける)
- 権限付与系(allow / sandbox)は CDATA で宣言して編集者の入力を post-transform まで温存し、 IframePolicyTransform でホストポリシーの許可リストによりフィルタする
- カスタム定義キャッシュのため HTML.DefinitionID を固定し、HTML.DefinitionRev をポリシーのハッシュから生成
拡張ポイントは引数のコールバック($configExtension / $definitionExtension)として受け取り、 フック発火(HookFactory 等のグローバル状態アクセス)は呼び出し側に閉じる。これにより本クラスは グローバル状態(config 定数・Hook)に依存せず、引数で受け取った値だけで構築するため単体テスト可能。
Table of Contents
Constants
- DEFINITION_ID = 'acms-html-purifier'
- カスタム HTML 定義を識別する固定 ID。HTML.DefinitionRev と組でキャッシュキーになる。
- REFERRER_POLICIES = ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'same-origin', 'strict-origin', 'strict-origin-when-cross-origin', 'unsafe-url']
- referrerpolicy で許可する標準値(Referrer-Policy 仕様の取りうる値)。
Methods
- create() : HTMLPurifier
- 設定済みの HTMLPurifier を生成する。
- addBlockEditorAttributes() : void
- ブロックエディター用の data 属性などを定義する(既存挙動を維持)。
- addIframeAttributes() : void
- iframe の許可属性を定義する。
Constants
DEFINITION_ID
カスタム HTML 定義を識別する固定 ID。HTML.DefinitionRev と組でキャッシュキーになる。
private
mixed
DEFINITION_ID
= 'acms-html-purifier'
REFERRER_POLICIES
referrerpolicy で許可する標準値(Referrer-Policy 仕様の取りうる値)。
private
array<string|int, string>
REFERRER_POLICIES
= ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'same-origin', 'strict-origin', 'strict-origin-when-cross-origin', 'unsafe-url']
Methods
create()
設定済みの HTMLPurifier を生成する。
public
static create(IframePolicy $policy, array<string|int, string> $dangerousTags, string $cacheDir[, callable(HTMLPurifier_Config): void|null $configExtension = null ][, callable(HTMLPurifier_HTMLDefinition, HTMLPurifier_Config): void|null $definitionExtension = null ]) : HTMLPurifier
Parameters
- $policy : IframePolicy
-
iframe ホスト whitelist ポリシー
- $dangerousTags : array<string|int, string>
-
HTML.ForbiddenElements に渡す危険タグ(既定 ['script','form']。 'iframe' を含めると whitelist を無視して iframe を常にタグごと削除する後方互換キルスイッチになる)
- $cacheDir : string
-
HTMLPurifier の Serializer キャッシュディレクトリ
- $configExtension : callable(HTMLPurifier_Config): void|null = null
-
カスタム HTML 定義の取得前に呼ばれる config 拡張フック。HTML.Allowed* / URI.* / CSS.* / Attr.* などの設定をここで上書き・追加できる(HTML.* は getDefinition 前に確定させる必要があるため)。
- $definitionExtension : callable(HTMLPurifier_HTMLDefinition, HTMLPurifier_Config): void|null = null
-
カスタム HTML 定義の取得後に呼ばれる定義拡張フック。addAttribute / addElement で要素・属性を 追加できる。定義を変更する場合は $configExtension 側で HTML.DefinitionRev を変更し、 キャッシュを再生成させること(変更がキャッシュに反映されないため)。
Return values
HTMLPurifieraddBlockEditorAttributes()
ブロックエディター用の data 属性などを定義する(既存挙動を維持)。
private
static addBlockEditorAttributes(HTMLPurifier_HTMLDefinition $def) : void
Parameters
- $def : HTMLPurifier_HTMLDefinition
addIframeAttributes()
iframe の許可属性を定義する。
private
static addIframeAttributes(HTMLPurifier_HTMLDefinition $def, IframePolicy $policy) : void
(a) 提示・無害な属性は型付き AttrDef で宣言(CDATA 素通しを避ける)。width/height は HTML5 モジュールが Length で、title は Common で既に宣言済みのため追加しない。 (b) 権限付与系(allow / sandbox)は CDATA で宣言する。CDATA は値を検証しないため、 編集者が書いた生の値がそのまま post-transform(IframePolicyTransform)まで残り、 そこでホストポリシーの許可リストによりフィルタされた値に置き換わる。
Parameters
- $def : HTMLPurifier_HTMLDefinition
- $policy : IframePolicy