PHPのプログラム側で受け取るパラメータには、GETやPOSTで様々なものが送信されてくる。

受け取ったパラメータはPHP側でサニタイズや、入力規則のチェックをするわけだが、この時ヌルやタブ、改行コードなどの不要な制御文字を一括してチェックできる正規表現がある。

例えば、問い合わせフォームなどで使われるinputタグから送信される値に対して、条件を100文字以内の制御文字以外のテキストとした場合、次のような正規表現となる。

if(preg_match('/\A[[:^cntrl:]]{0,100}\z/u', $str)) {
  // OK!
}

また、textareaのような複数行の入力を受け付ける要素から送信される値の場合は、制御文字のうち改行を許容する必要があるので、その場合は以下のような正規表現となる。

if(preg_match('/\A[\r\n[:^cntrl:]]{0,100}\z/u', $str)) {
  // OK!
}

PHPにはヌルバイト攻撃という脆弱性が存在し、パラメータに%00(ヌルバイト)が付与され送信されると意図しない動作をする関数がある。

そのため、リクエストで送信されてくるパラメータを受け取る際は、可能な限り不要な制御文字を弾くように実装しなければならない。