Web 開発では、ユーザー入力の処理は、アプリケーションのセキュリティとデータの正確性を確保するための重要なステップです。未処理の入力は、クロスサイト スクリプティング攻撃 (XSS)、SQL インジェクション、その他のセキュリティ問題を引き起こす可能性があります。 PHP8 は、ユーザー入力データを簡単にフィルタリングしてクリーンアップするための、より完全な Sanitize Filters メカニズムを開発者に提供します。
サニタイズ フィルターは PHP の組み込みフィルター メカニズムであり、入力データ内に存在する可能性のある違法なコンテンツまたは潜在的に危険なコンテンツをクリーンアップするために使用されます。開発者は、さまざまな種類のフィルターを使用して、HTML タグの削除、特殊文字のエスケープ、正しい書式設定などを行うことで、ユーザー入力内の悪意のあるコードが実行されるのを防ぐことができます。
一般的なフィルタリングの種類は次のとおりです。
filter_var() は最も一般的に使用されるフィルター関数の 1 つであり、単一の変数を処理するために使用されます。
$input = $_POST['username'];
$sanitized_input = filter_var($input, FILTER_SANITIZE_STRING);
この例では、 $_POSTからusernameという名前の入力値を取得し、 FILTER_SANITIZE_STRINGフィルターを使用して、潜在的な HTML タグと特殊文字を削除します。
GET 、 POST 、 COOKIEなどのグローバル変数からの入力を直接フィルターしたい場合は、 filter_input()関数を使用できます。
$sanitized_input = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
この方法はより簡潔かつ安全で、グローバル配列への直接アクセスを回避し、データ汚染のリスクを軽減します。
複数の入力変数を一度に処理する必要がある場合は、 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 開発プロセスでは、すべての外部入力をフィルタリングして検証することが、安全なシステムを構築するための基本原則です。