Moodleのリクエスト変数用関数
MoodleではGET/POSTされた変数に直接アクセスしないように決められている。
https://docs.moodle.org/dev/Security#Don.27t_trust_any_input_from_users
そのためmoodleforms以外で利用する場合はrequired_param()
/optional_param()
を利用する必要があるが、どのようなオプションが利用が出来るかは公式に記載が見つからないので以下にまとめる。
メモ
以下の内容はMoodle 3.2.3のソースを見て纏めたもの。
関数とパラメータの種類
required_param($parname, $type)
指定した$parnameの変数名のGET/POST値を取得する。存在しない(undefined)場合はエラーとなるため、処理の続行に必須の変数名を指定するときに使用する。
Moodle 2.2以降から取得した値がarray()型だった場合はエラーとなるはずだが実際にはrequired_param_array()を呼び出して処理続行となっている…
required_param_array($parname, $type)
required_param()のarray()版。array()型ではない場合はエラーとなる。
optional_param($parname, $default, $type)
required_param()と異なり、指定した$parnameがない場合は$defaultが利用される。
Moodle 2.2以降から取得した値がarray()型だった場合はエラーとなるはずだが実際にはoptional_param_array()を呼び出して処理続行となっている…
optional_param_array($parname, $default, $type)
optional_param()のarray()版。
$typeパラメータ
上記の全ての関数で共通して以下の$typeパラメータに対応する。許可するとある場合、許可されない時は返り値は空文字となる。
英字とある場合は大文字/小文字のアルファベット([a-zA-Z])*、英数字とある場合は英字と数字([a-zA-Z0-9])とする。
$type | 内容 |
---|---|
PARAM_RAW | 特になにもしない |
PARAM_RAW_TRIMMED | trim()により前後のスペース、改行等を取り除く |
PARAM_CLEAN | HTMLPurifierで処理する。とりあえずコレ使っとけ的な奴? |
PARAM_CLEANHTML | HTMLPurifierで処理したあとtrim()する |
PARAM_INT | intにキャストする |
PARAM_FLOAT | floatにキャストする |
PARAM_ALPHA | 英字以外を取り除く |
PARAM_ALPHAEXT | 英字、_ 、- 以外を取り除く |
PARAM_ALPHANUM | 英数字以外を取り除く |
PARAM_ALPHANUMEXT | 英数字、_ 、- 以外を取り除く |
PARAM_SEQUENCE | 数字以外を取り除く |
PARAM_BOOL |
on /yes /true /!empty($parname) を1に、off /no /false /empty($parname) を0にして返す |
PARAM_NOTAGS | striptags()でタグを除去する |
PARAM_TEXT | multilang filter用以外のタグを除去する |
PARAM_COMPONENT | Moodle用プラグインの命名ルールに則っているもののみ許可する。この部分の記述でmod_alpha_beta のようにアンダースコアが2つ以上ある活動モジュール名が許されていないことが分かる。
|
PARAM_PLUGIN, PARAM_AREA | プラグインの命名ルールに則っているもののみ許可する。PARAM_COMPONENTと異なり活動モジュール名の変則ルールに対応していない |
PARAM_SAFEDIR |
PARAM_ALPHANUMEXTと同じく英数字と_ 、- 以外を取り除く |
PARAM_SAFEPATH |
PARAM_SAFEDIRに加え/ 以外を取り除く |
PARAM_FILE | ファイル名として怪しい文字を取り除く |
PARAM_PATH |
/ で区切られた文字列からディレクトリ名やファイル名として怪しい文字を取り除く |
PARAM_HOST | ホスト名またはIPv4アドレスのみ許可する |
PARAM_URL | (スキーマを含めて)URLが有効なフォーマットの場合のみ許可する |
PARAM_LOCALURL | サイト内URLとして有効なフォーマットの場合のみ許可する |
PARAM_PEM | 有効なBASE64フォーマットのPEMファイルの場合のみ許可する |
PARAM_BASE64 | 有効なBASE64フォーマットの場合のみ許可する |
PARAM_TAG | 制御文字等を取り除き、連続する半角スペースを1つに置換する。HTMLタグが残るので出力時にサニタイズする必要がある |
PARAM_TAGLIST |
, で区切られたHTMLタグのリストから不正なものを取り除く |
PARAM_CAPABILITY | MoodleのCapabilityとして有効な場合のみ許可する |
PARAM_PERMISSION |
CAP_INHERIT 、CAP_ALLOW 、 CAP_PREVENT 、 CAP_PROHIBIT のリスト中にあるかチェックする。リストに無い場合はCAP_INHERIT を返す |
PARAM_AUTH | 導入済み認証プラグインの場合のみ許可する |
PARAM_LANG | 導入済み言語パックの場合のみ許可する |
PARAM_THEME | 導入済みテーマの場合のみ許可する |
PARAM_USERNAME | ユーザ名のルールに則っているもののみ許可する。実在の有無はチェックしない |
PARAM_EMAIL | e-mailアドレスとして有効なフォーマットの場合のみ許可する |
PARAM_STRINGID | 英字で始まり、英数字、\ 、. 、: 、/ 、_ 、- を含む文字列のみ許可する |
PARAM_TIMEZONE | タイムゾーンとして有効なフォーマット(+9.0 、Asia/Tokyo )のみ許可する |