a-blog cms PHP API Reference

HeaderValidator
in package

Webhook のカスタムヘッダー名・値を検証する。 保存時(ACMS_POST_Webhook 系)と送信時(Engine::buildHeaders())の両方から呼び出す共通ロジック。

Table of Contents

Constants

HEADER_NAME_PATTERN  = '/^[!#$%&\'*+\-.^_`|~0-9A-Za-z]+$/'
RFC 7230 の field-name(token)で許可される文字。 「tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA」に対応する。
RESERVED_HEADER_NAMES  = ['host', 'content-length', 'transfer-encoding', 'connection', 'content-type']
プロトコル制御に関わる予約ヘッダー名(大文字小文字を区別しないブロックリスト方式)。 Content-Type は専用セレクトボックス(webhook_content_type)に責務を分離したため、 カスタムヘッダー欄からの指定自体を禁止する。

Methods

isNameRequired()  : bool
ヘッダー名が空で値だけ入力されている状態かどうかを判定する。 管理画面側で「値のみの保存はできません」という専用メッセージを出すために isValid() から分離している。
isValid()  : bool
ヘッダー名・値が安全かどうかを検証する。 CRLF(\r, \n)を含む場合、または予約ヘッダー名と一致する場合は false を返す。
isValidName()  : bool
ヘッダー名が RFC 7230 の token として妥当かどうかを検証する。
containsCrlf()  : bool

Constants

HEADER_NAME_PATTERN

RFC 7230 の field-name(token)で許可される文字。 「tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA」に対応する。

private mixed HEADER_NAME_PATTERN = '/^[!#$%&\'*+\-.^_`|~0-9A-Za-z]+$/'

RESERVED_HEADER_NAMES

プロトコル制御に関わる予約ヘッダー名(大文字小文字を区別しないブロックリスト方式)。 Content-Type は専用セレクトボックス(webhook_content_type)に責務を分離したため、 カスタムヘッダー欄からの指定自体を禁止する。

private mixed RESERVED_HEADER_NAMES = ['host', 'content-length', 'transfer-encoding', 'connection', 'content-type']

Methods

isNameRequired()

ヘッダー名が空で値だけ入力されている状態かどうかを判定する。 管理画面側で「値のみの保存はできません」という専用メッセージを出すために isValid() から分離している。

public isNameRequired(string $name, string $value) : bool
Parameters
$name : string
$value : string
Return values
bool

isValid()

ヘッダー名・値が安全かどうかを検証する。 CRLF(\r, \n)を含む場合、または予約ヘッダー名と一致する場合は false を返す。

public isValid(string $name, string $value) : bool

文字種のホワイトリスト検証(isValidName())は、ここではなく保存時のみ行う。 送信時にも適用すると、この検証を追加する前に保存された既存の Webhook が InvalidHeaderException で一斉に送信中止となり、稼働中の連携が黙って止まるため。

Parameters
$name : string
$value : string
Return values
bool

isValidName()

ヘッダー名が RFC 7230 の token として妥当かどうかを検証する。

public isValidName(string $name) : bool

空欄は isNameRequired() の責務(専用メッセージを出す)なので、ここでは妥当として扱い 二重にエラーを出さない。保存時(ACMS_POST_Webhook)からのみ呼び出す。

Parameters
$name : string
Return values
bool

containsCrlf()

private containsCrlf(string $value) : bool
Parameters
$value : string
Return values
bool

        
On this page

Search results