DatabaseNameValidator
in package
FinalYes
インストーラーで入力される DB 名・テーブル接頭辞の検証。
install の Database ステップは CREATE DATABASE \{db_name}`` / ALTER DATABASE ... を
バッククォートで囲むだけで発行しており、バッククォートを含む値を渡すと SQL を抜けられる。
接頭辞(db_prefix)は全テーブル名に連結されるため同様に危険。ここで許可リスト方式に倒し、
想定外の文字を含む入力を CREATE/ALTER 前に弾く。判定のみの純粋ロジックとする。
Table of Contents
Constants
- DATABASE_NAME_PATTERN = '/\A[A-Za-z0-9_][A-Za-z0-9_-]*\z/'
- DB 名の許可パターン。英数字・アンダースコア・ハイフンを許可する。 バッククォート/空白/記号を排除して識別子エスケープの不備を無害化する。 さくらインターネット等、契約者アカウント名(ハイフンを含みうる)が DB 名の先頭に 自動付与されるレンタルサーバー環境に対応するため、2 文字目以降のハイフンを許可する。 先頭文字だけは CLI ツールへの引数渡し時にオプションと誤解釈されるのを避けるため 英数字・アンダースコアのみに制限する。
- MAX_IDENTIFIER_LENGTH = 64
- MySQL の識別子最大長。
- PREFIX_PATTERN = '/\A[A-Za-z0-9_]*\z/'
- テーブル接頭辞の許可パターン。テーブル名に連結されるためハイフンは許可しない。 空文字(接頭辞なし運用)も許可する。
Methods
- isValidDatabaseName() : bool
- isValidPrefix() : bool
Constants
DATABASE_NAME_PATTERN
DB 名の許可パターン。英数字・アンダースコア・ハイフンを許可する。 バッククォート/空白/記号を排除して識別子エスケープの不備を無害化する。 さくらインターネット等、契約者アカウント名(ハイフンを含みうる)が DB 名の先頭に 自動付与されるレンタルサーバー環境に対応するため、2 文字目以降のハイフンを許可する。 先頭文字だけは CLI ツールへの引数渡し時にオプションと誤解釈されるのを避けるため 英数字・アンダースコアのみに制限する。
private
mixed
DATABASE_NAME_PATTERN
= '/\A[A-Za-z0-9_][A-Za-z0-9_-]*\z/'
MAX_IDENTIFIER_LENGTH
MySQL の識別子最大長。
private
mixed
MAX_IDENTIFIER_LENGTH
= 64
PREFIX_PATTERN
テーブル接頭辞の許可パターン。テーブル名に連結されるためハイフンは許可しない。 空文字(接頭辞なし運用)も許可する。
private
mixed
PREFIX_PATTERN
= '/\A[A-Za-z0-9_]*\z/'
Methods
isValidDatabaseName()
public
isValidDatabaseName(string $name) : bool
Parameters
- $name : string
Return values
boolisValidPrefix()
public
isValidPrefix(string $prefix) : bool
Parameters
- $prefix : string