[PHP]filter_var関数の完全ガイド – データ検証とサニタイズの基礎

PHP

PHPで安全なデータ処理を行うために欠かせないfilter_var()関数について、実践的な例を交えながら詳しく解説していきます。

filter_var関数の基本

filter_var()は、指定された値に対してフィルターを適用する関数です。基本的な構文は以下の通りです:

mixed filter_var ( mixed $variable [, int $filter = FILTER_DEFAULT [, mixed $options ]] )

主な使用例と実践的なコード

1. メールアドレスの検証

$email = "test@example.com";
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo "有効なメールアドレスです";
} else {
    echo "無効なメールアドレスです";
}

2. URLの検証

$url = "https://www.example.com";
if (filter_var($url, FILTER_VALIDATE_URL)) {
    echo "有効なURLです";
} else {
    echo "無効なURLです";
}

3. 整数値の検証と範囲チェック

$age = "25";
$options = array(
    "options" => array(
        "min_range" => 0,
        "max_range" => 120
    )
);

$valid_age = filter_var($age, FILTER_VALIDATE_INT, $options);
if ($valid_age !== false) {
    echo "有効な年齢です";
} else {
    echo "無効な年齢です";
}

4. IPアドレスの検証

$ip = "192.168.1.1";
if (filter_var($ip, FILTER_VALIDATE_IP)) {
    echo "有効なIPアドレスです";
} else {
    echo "無効なIPアドレスです";
}

// IPv6の検証
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
    echo "有効なIPv6アドレスです";
}

5. 特殊文字のサニタイズ

$text = "<h1>Hello World!</h1>";
$sanitized = filter_var($text, FILTER_SANITIZE_STRING);
// PHP 8.1以降では代わりに以下を使用
$sanitized = htmlspecialchars($text, ENT_QUOTES, 'UTF-8');

よく使用されるフィルター定数

バリデーション用フィルター

  • FILTER_VALIDATE_EMAIL
  • FILTER_VALIDATE_IP
  • FILTER_VALIDATE_URL
  • FILTER_VALIDATE_INT
  • FILTER_VALIDATE_FLOAT
  • FILTER_VALIDATE_BOOLEAN

サニタイズ用フィルター

  • FILTER_SANITIZE_EMAIL
  • FILTER_SANITIZE_URL
  • FILTER_SANITIZE_NUMBER_INT
  • FILTER_SANITIZE_NUMBER_FLOAT
  • FILTER_SANITIZE_STRING(PHP 8.1で非推奨)

高度な使用例

カスタムフィルターの作成

$options = array(
    "options" => array(
        "regexp" => "/^[A-Za-z]{3}[0-9]{3}$/"
    )
);

$code = "ABC123";
if (filter_var($code, FILTER_VALIDATE_REGEXP, $options)) {
    echo "有効なコードです";
} else {
    echo "無効なコードです";
}

複数のフラグの組み合わせ

$email = "TEST@EXAMPLE.COM";
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
$email = filter_var($email, FILTER_VALIDATE_EMAIL, FILTER_FLAG_EMAIL_UNICODE);

セキュリティのベストプラクティス

  1. ユーザー入力は常にフィルタリングする
  2. 適切なフィルターとフラグを選択する
  3. バリデーションとサニタイズを組み合わせる
  4. エラーハンドリングを適切に実装する

まとめ

filter_var()関数は、PHPアプリケーションでデータの検証とサニタイズを行う際の強力なツールです。適切に使用することで、以下のような利点があります:

  • セキュリティの向上
  • データの整合性の確保
  • コードの可読性と保守性の向上

特に、Webアプリケーションでユーザー入力を処理する際には、必ず適切なフィルタリングを行うことを推奨します。

タイトルとURLをコピーしました