現在の位置: ホーム> 最新記事一覧> PHP8 ユーザー入力フィルタリング ガイド: サニタイズ フィルターを使用して Web サイトのセキュリティを向上させる

PHP8 ユーザー入力フィルタリング ガイド: サニタイズ フィルターを使用して Web サイトのセキュリティを向上させる

M66 2025-10-24

PHP8 のサニタイズフィルターを使用してユーザー入力をフィルターする

Web 開発では、ユーザー入力の処理は、アプリケーションのセキュリティとデータの正確性を確保するための重要なステップです。未処理の入力は、クロスサイト スクリプティング攻撃 (XSS)、SQL インジェクション、その他のセキュリティ問題を引き起こす可能性があります。 PHP8 は、ユーザー入力データを簡単にフィルタリングしてクリーンアップするための、より完全な Sanitize Filters メカニズムを開発者に提供します。

サニタイズフィルターとは

サニタイズ フィルターは PHP の組み込みフィルター メカニズムであり、入力データ内に存在する可能性のある違法なコンテンツまたは潜在的に危険なコンテンツをクリーンアップするために使用されます。開発者は、さまざまな種類のフィルターを使用して、HTML タグの削除、特殊文字のエスケープ、正しい書式設定などを行うことで、ユーザー入力内の悪意のあるコードが実行されるのを防ぐことができます。

一般的なフィルタリングの種類は次のとおりです。

  • FILTER_SANITIZE_STRING: タグを削除し、特殊文字をエスケープします。
  • FILTER_SANITIZE_EMAIL: 電子メール アドレスをサニタイズします。
  • FILTER_SANITIZE_URL: URL 内の不正な文字をフィルターで除外します。
  • FILTER_SANITIZE_NUMBER_INT: 数値、プラス記号とマイナス記号を保持します。

filter_var 関数を使用して単一の変数をフィルタリングする

filter_var() は最も一般的に使用されるフィルター関数の 1 つであり、単一の変数を処理するために使用されます。

 $input = $_POST['username'];
$sanitized_input = filter_var($input, FILTER_SANITIZE_STRING);

この例では、 $_POSTからusernameという名前の入力値を取得し、 FILTER_SANITIZE_STRINGフィルターを使用して、潜在的な HTML タグと特殊文字を削除します。

filter_input 関数を使用してグローバル入力をフィルタリングする

GETPOSTCOOKIEなどのグローバル変数からの入力を直接フィルターしたい場合は、 filter_input()関数を使用できます。

 $sanitized_input = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);

この方法はより簡潔かつ安全で、グローバル配列への直接アクセスを回避し、データ汚染のリスクを軽減します。

filter_var_array 関数を使用してデータをバッチでフィルタリングする

複数の入力変数を一度に処理する必要がある場合は、 filter_var_array()関数を使用できます。

 $input = array(
    'username' => $_POST['username'],
    'password' => $_POST['password']
);

$filters = array(
    'username' => FILTER_SANITIZE_STRING,
    'password' => FILTER_SANITIZE_STRING
);

$sanitized_input = filter_var_array($input, $filters);

このメソッドを使用すると、フィルタリング ルールの配列を定義し、複数の変数に対してバッチ処理を実行し、クリーンな配列を返して、その後の検証と論理的判断を容易にすることができます。

完全な例のデモンストレーション

次の例は、送信後にサニタイズ フィルターを使用してユーザー名とパスワードをフィルターする単純なフォームを示しています。

 <?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $input = array(
        'username' => $_POST['username'],
        'password' => $_POST['password']
    );

    $filters = array(
        'username' => FILTER_SANITIZE_STRING,
        'password' => FILTER_SANITIZE_STRING
    );

    $sanitized_input = filter_var_array($input, $filters);

    echo "ユーザー名:" . $sanitized_input['username'] . "<br>";
    echo "パスワード:" . $sanitized_input['password'] . "<br>";
}
?>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <label>ユーザー名:</label>
    <input type="text" name="username"><br>
    <label>パスワード:</label>
    <input type="password" name="password"><br>
    <input type="submit" value="提出する">
</form>

この例では、フォームが送信されると、PHP スクリプトはfilter_var_array()を通じて入力データをクリーンアップし、フィルター処理された結果を出力します。

要約する

PHP8 でサニタイズ フィルターを使用すると、アプリケーションのセキュリティとデータの信頼性が大幅に向上します。フィルターを適切に選択し、検証メカニズムと組み合わせることで、開発者は XSS や SQL インジェクションなどの一般的な攻撃リスクを効果的に回避できます。 Web 開発プロセスでは、すべての外部入力をフィルタリングして検証することが、安全なシステムを構築するための基本原則です。