{category}

PHP - 入力検証

filter_input()

フィルター・インプット(Web開発とセキュリティ

意味 外部入力の検証と浄化


filter_input()とは?

filter_input()は、PHPで外部からの入力(GET、POST、COOKIEなど)を検証し、浄化するための関数です。この関数を使うことで、ユーザーからの入力を安全に処理し、悪意のあるデータを防ぐことができます。

filter_input()の具体的な使い方

GET、POST、COOKIEからの入力検証

// フォームが送信されたと仮定
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
$age = filter_input(INPUT_POST, 'age', FILTER_VALIDATE_INT);
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);

// GETパラメータの検証
$page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT);

// クッキーの検証
$user_id = filter_input(INPUT_COOKIE, 'user_id', FILTER_VALIDATE_INT);

echo "検証結果:\n";
echo "Email: " . ($email ? $email : "無効") . "\n";
echo "年齢: " . ($age !== false ? $age : "無効") . "\n";
echo "名前: {$name}\n";
echo "ページ: " . ($page !== false ? $page : "無効") . "\n";
echo "ユーザーID: " . ($user_id !== false ? $user_id : "無効") . "\n";

👇出力結果

検証結果:
Email: [email protected]
年齢: 25
名前: John Doe
ページ: 1
ユーザーID: 12345

この例では、filter_input()関数を使用してPOST、GET、COOKIEからの入力を安全に取得し検証しています。メールアドレス、整数、文字列など、異なるタイプのデータに対して適切なフィルタを適用しています。これにより、外部からの入力を安全に処理し、不正なデータの混入を防ぐことができます。

複数の入力フィールドの一括処理

// フォームが送信されたと仮定
$filters = [
    'username' => FILTER_SANITIZE_STRING,
    'email' => FILTER_VALIDATE_EMAIL,
    'age' => [
        'filter' => FILTER_VALIDATE_INT,
        'options' => ['min_range' => 1, 'max_range' => 120]
    ],
    'url' => FILTER_VALIDATE_URL
];

$inputs = filter_input_array(INPUT_POST, $filters);

foreach ($inputs as $field => $value) {
    if ($value === false || $value === null) {
        echo "{$field}: 無効な入力\n";
    } else {
        echo "{$field}: {$value}\n";
    }
}

👇出力結果

username: JohnDoe
email: [email protected]
age: 30
url: https://www.example.com

この例では、filter_input_array()関数を使用して複数の入力フィールドを一度に処理しています。ユーザー名、メールアドレス、年齢、URLに対して、それぞれ適切なフィルタを適用しています。年齢には追加のオプションとして範囲チェックも行っています。この方法は、多くの入力フィールドを持つフォームを処理する際に特に便利です。

filter_input()に関するよくある質問

Q. filter_input()の利点は?
A. filter_input()の主な利点は、外部入力を直接取得しながら同時に検証できることです。これにより、$_POST, $_GET, $_COOKIEなどのスーパーグローバル変数を直接使用するよりも安全にデータを処理できます。
Q. INPUT_POSTとは何ですか?
A. INPUT_POSTは、filter_input()関数で使用する定数の一つで、POSTメソッドで送信されたデータを指定します。他にもINPUT_GET(GETメソッド)、INPUT_COOKIE(クッキー)、INPUT_SERVER(サーバー変数)などがあります。
Q. フィルタを指定しない場合は?
A. フィルタを指定しない場合、filter_input()はデフォルトでFILTER_DEFAULT(特別な処理を行わない)フィルタを使用します。ただし、セキュリティの観点から、常に適切なフィルタを指定することが推奨されます。

PHPのfilter_input()についても学べる書籍の紹介

「プログラミング単語帳」を使って、プログラミングの単語を英単語のように学習してみませんか?
プログラミング単語帳には、PHPのfilter_input()やsession_start()、password_hash()、strip_tags()、などのような実務でよく使われる単語が数百以上収録されています。
この書籍には、プログラミングの単語の意味や読み方、単語の使い方がわかる例文などが掲載されており、いつでもどこでもプログラミングの学習ができます。

よく使われる単語にだけ絞って学習することができるので、効率的にプログラミングが学習できます。

1日5分の暗記でプログラミンが身に付く!プログラミング単語帳 公式ストアで発売中!

HTML編、CSS編、JavaScript編、PHP編、Ruby編、その他単語編の6シリーズ分が公式ストアにて販売中です。気になった方はぜひ購入してみてください。


PHPを学べる「プログラミング単語帳」アプリ

プログラミング単語帳がアプリになりました!PHPはもちろん、10種類のプログラミング言語の中から、よく使われる単語をスマホで学習できます。

収録単語は2,000単語以上!
現在は、HTML、CSS、JavaScirpt、PHP、Laravel、Ruby、Python、MySQL、Linux、など10カテゴリーの単語帳が1つのアプリに収録されています。

いつでも、どこでも、隙間時間を有効活用して、プログラミングを効率的に学べるので、ぜひダウンロードしてみてください。

2024年7月アップデート情報:「Laravel」カテゴリーが追加されましました!

2024年8月アップデート情報:「MySQL」「Linux」カテゴリーが追加されましました!


関連するそのほかの単語

session_start()

セッションの開始

種類: セッション管理

password_hash()

パスワードを安全に保存

種類: パスワードハッシュ

strip_tags()

HTMLタグを取り除く

種類: XSS対策

array_pop()

配列の最後の要素を取り出す

種類: 配列関数

(array)

配列への型変換

種類: 型変換