a-blog cms PHP API Reference

Json2TplHelper
in package

Table of Contents

Constants

ALLOWED_CONTENT_TYPES  = ['application/json', 'text/json', 'text/plain', 'application/javascript', 'text/javascript']
許可する Content-Type(メディアタイプ部分のみで比較)
DEFAULT_MAX_CONTENT_LENGTH  = 5 * 1024 * 1024
レスポンスボディの許容最大サイズ(byte)の既定値。.env の JSON2TPL_MAX_CONTENT_LENGTH で変更できる
DEFAULT_MAX_REDIRECTS  = 5
追跡を許可するリダイレクト回数の上限の既定値。.env の JSON2TPL_MAX_REDIRECTS で変更できる

Properties

$allowedLocalDirs  : array<string|int, string>
ローカル取得を許可するディレクトリ一覧
$filesystem  : Filesystem
$httpFetcher  : callable(string, array<string|int, string>): array{statusCode: int, contentType: ?string, location: ?string, body: string}
HTTP(S) URI を取得するフェッチャー
$maxContentLength  : int
レスポンスボディの許容最大サイズ(byte)
$maxRedirects  : int
追跡を許可するリダイレクト回数の上限
$ssrfGuard  : SsrfGuard
取得先が内部/予約済みアドレスを指していないか検証するガード

Methods

__construct()  : mixed
getContents()  : string
urlからコンテンツの取得
getJsonCache()  : string|bool
キャッシュの取得
isVector()  : bool
添え字が0から連続する数値(=配列とみなせる)ときにtrue
resolveAllowedLocalDirsFromEnv()  : array<string|int, string>
saveCache()  : mixed
キャッシュの保存
assertSafeContentType()  : void
Content-Type がJSON/テキスト系として許可されたものか検証する
assertSafeRemoteUri()  : array<string|int, string>
SSRF対策として、URIのホストが内部/プライベートアドレスを指していないか検証する
fetchHttpByCurl()  : array{statusCode: int, contentType: ?string, location: ?string, body: string}
curl で HTTP(S) コンテンツを取得する既定のフェッチャー
getCacheId()  : string
キャッシュidの取得
getHttpContents()  : string
HTTP(S) URI からコンテンツを取得する
getLocalContents()  : string
許可ディレクトリ配下のローカルファイルを読み込む
getLogEndpoint()  : string
ログに出力する外部エンドポイントを返す。
getRawContents()  : string
スキームに応じてローカル/HTTP(S)取得に振り分ける
resolveMaxContentLengthFromEnv()  : int
resolveMaxRedirectsFromEnv()  : int
resolveRedirectUri()  : string
リダイレクト元URIとLocationヘッダの値から絶対URIを組み立てる
resolveSsrfWhiteListFromEnv()  : array<string|int, string>

Constants

ALLOWED_CONTENT_TYPES

許可する Content-Type(メディアタイプ部分のみで比較)

private mixed ALLOWED_CONTENT_TYPES = ['application/json', 'text/json', 'text/plain', 'application/javascript', 'text/javascript']

DEFAULT_MAX_CONTENT_LENGTH

レスポンスボディの許容最大サイズ(byte)の既定値。.env の JSON2TPL_MAX_CONTENT_LENGTH で変更できる

private mixed DEFAULT_MAX_CONTENT_LENGTH = 5 * 1024 * 1024

DEFAULT_MAX_REDIRECTS

追跡を許可するリダイレクト回数の上限の既定値。.env の JSON2TPL_MAX_REDIRECTS で変更できる

private mixed DEFAULT_MAX_REDIRECTS = 5

Properties

$allowedLocalDirs

ローカル取得を許可するディレクトリ一覧

private array<string|int, string> $allowedLocalDirs

$httpFetcher

HTTP(S) URI を取得するフェッチャー

private callable(string, array<string|int, string>): array{statusCode: int, contentType: ?string, location: ?string, body: string} $httpFetcher

$maxContentLength

レスポンスボディの許容最大サイズ(byte)

private int $maxContentLength

$maxRedirects

追跡を許可するリダイレクト回数の上限

private int $maxRedirects

$ssrfGuard

取得先が内部/予約済みアドレスを指していないか検証するガード

private SsrfGuard $ssrfGuard

Methods

__construct()

public __construct([array<string|int, string>|null $allowedLocalDirs = null ][, Filesystem|null $filesystem = null ][, callable(string): array<string|int, string>|null $dnsResolver = null ][, callable(string, array<string|int, string>): array{statusCode: int, contentType: ?string, location: ?string, body: string}|null $httpFetcher = null ][, int|null $maxContentLength = null ][, int|null $maxRedirects = null ][, array<string|int, string>|null $ssrfWhiteList = null ]) : mixed
Parameters
$allowedLocalDirs : array<string|int, string>|null = null

ローカル取得を許可するディレクトリ一覧。null の場合 THEMES_DIR と .env の JSON2TPL_LOCAL_WHITE_LIST から解決する

$filesystem : Filesystem|null = null
$dnsResolver : callable(string): array<string|int, string>|null = null

ホスト名から IP アドレス一覧を解決するリゾルバ(テスト時の差し替え用)。null の場合 DNS 解決を行う既定実装を使う

$httpFetcher : callable(string, array<string|int, string>): array{statusCode: int, contentType: ?string, location: ?string, body: string}|null = null

HTTP(S) URI を取得するフェッチャー(テスト時の差し替え用)。null の場合 curl による既定実装を使う

$maxContentLength : int|null = null

レスポンスボディの許容最大サイズ(byte)。null の場合 .env の JSON2TPL_MAX_CONTENT_LENGTH から解決する

$maxRedirects : int|null = null

追跡を許可するリダイレクト回数の上限。null の場合 .env の JSON2TPL_MAX_REDIRECTS から解決する

$ssrfWhiteList : array<string|int, string>|null = null

SSRFガードを免除する IP アドレス/CIDR 一覧。null の場合 .env の JSON2TPL_SSRF_WHITE_LIST から解決する

getContents()

urlからコンテンツの取得

public getContents(string $uri) : string
Parameters
$uri : string
Return values
string

getJsonCache()

キャッシュの取得

public getJsonCache(string $uri) : string|bool
Parameters
$uri : string
Return values
string|bool

isVector()

添え字が0から連続する数値(=配列とみなせる)ときにtrue

public isVector(array<string|int, mixed> $ary) : bool
Parameters
$ary : array<string|int, mixed>
Return values
bool

resolveAllowedLocalDirsFromEnv()

public static resolveAllowedLocalDirsFromEnv() : array<string|int, string>

.env の JSON2TPL_LOCAL_WHITE_LIST(カンマ区切り)から追加の許可ディレクトリを組み立てる

ACMS_ValidatorBody::json2TplSource() が保存時バリデーションで同じ許可 ディレクトリ一覧を参照するため public にしている。

Return values
array<string|int, string>

saveCache()

キャッシュの保存

public saveCache(string $uri, string $contents[, int $expire = 0 ]) : mixed
Parameters
$uri : string
$contents : string
$expire : int = 0

assertSafeContentType()

Content-Type がJSON/テキスト系として許可されたものか検証する

private assertSafeContentType(string|null $contentType) : void
Parameters
$contentType : string|null

assertSafeRemoteUri()

SSRF対策として、URIのホストが内部/プライベートアドレスを指していないか検証する

private assertSafeRemoteUri(string $uri) : array<string|int, string>
Parameters
$uri : string
Return values
array<string|int, string> —

検証を通った IP アドレス一覧(接続のピンニングに使う)

fetchHttpByCurl()

curl で HTTP(S) コンテンツを取得する既定のフェッチャー

private fetchHttpByCurl(string $uri[, array<string|int, string> $pinnedIpAddresses = [] ]) : array{statusCode: int, contentType: ?string, location: ?string, body: string}
Parameters
$uri : string
$pinnedIpAddresses : array<string|int, string> = []

接続を固定する検証済み IP アドレス一覧(DNS ピンニング)

Return values
array{statusCode: int, contentType: ?string, location: ?string, body: string}

getCacheId()

キャッシュidの取得

private getCacheId(string $uri) : string
Parameters
$uri : string
Return values
string

getHttpContents()

HTTP(S) URI からコンテンツを取得する

private getHttpContents(string $uri) : string

リダイレクトは自動追従(CURLOPT_FOLLOWLOCATION)せず、ホップごとに assertSafeRemoteUri() を再適用することで、安全なURLから内部アドレスへ 誘導するリダイレクトSSRFを防ぐ。

Parameters
$uri : string
Return values
string

getLocalContents()

許可ディレクトリ配下のローカルファイルを読み込む

private getLocalContents(string $uri) : string
Parameters
$uri : string
Return values
string

getLogEndpoint()

ログに出力する外部エンドポイントを返す。

private getLogEndpoint(string $uri) : string
Parameters
$uri : string
Return values
string

getRawContents()

スキームに応じてローカル/HTTP(S)取得に振り分ける

private getRawContents(string $uri) : string
Parameters
$uri : string
Return values
string

resolveMaxContentLengthFromEnv()

private static resolveMaxContentLengthFromEnv() : int

.env の JSON2TPL_MAX_CONTENT_LENGTH からレスポンスボディの許容最大サイズ(byte)を解決する

Return values
int

resolveMaxRedirectsFromEnv()

private static resolveMaxRedirectsFromEnv() : int

.env の JSON2TPL_MAX_REDIRECTS から追跡を許可するリダイレクト回数の上限を解決する

Return values
int

resolveRedirectUri()

リダイレクト元URIとLocationヘッダの値から絶対URIを組み立てる

private resolveRedirectUri(string $baseUri, string $location) : string
Parameters
$baseUri : string
$location : string
Return values
string

resolveSsrfWhiteListFromEnv()

private static resolveSsrfWhiteListFromEnv() : array<string|int, string>

.env の JSON2TPL_SSRF_WHITE_LIST(カンマ区切り、IPアドレスまたはCIDR表記)から SSRFガードを免除するIPアドレス/CIDR一覧を組み立てる

ACMS_SSRF_WHITE_LIST(全経路共通の許可リスト)も併せて読み、両方の和を返す。

Return values
array<string|int, string>

        
On this page

Search results