p97~p119 入力値検証

Security

XSSをふせぐためにformから送信された値をチェックします

mb_check_encoding(チェック対象の文字列、 文字エンコーディングの指定(省略可能))

・文字数のチェック

・数値の最小値・最大値のチェック

・制御文字のチェックや制限(改行やタブ等)

正規表現による入力値検証

<?php
    $p = $_GET['p'];
    if (preg_match('/\A[a-z0-9]{1,5}\z/ui', $p) !== 1) {
        die('1文字以上5文字以下の英数字を入力してください');
    }
?>

/ … 正規表現の始まり

\A … 文字列の先頭

[a-z0-9] … 英数字にマッチ(※英字なら[a-zA-Z]とする)

{1,5} … 1文字から5文字(0文字でも良ければ{0,5})

\z … 文字列の末尾

/ … 正規表現のおわり

u … 修飾子(UTF-8エンコーディングとする)

i … 修飾子(大文字と小文字を区別しない)

\A と \zの代わりに^ と $を使った場合、行の先頭・末尾を意味するので改行文字(%0a)をつけると、改行文字以降の値がチェック(入力値検証)をすり抜けてしまいます

BACK