$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
// 有効な電子メールアドレス,処理を続けます
} else {
// 無効なメールアドレス,エラーメッセージを表示します
}
ここでは、 Filter_Input()が最初に入力をクリーニングし、 Filter_Var()をクリーニングし、次にその正当性をさらに検証します。組み合わせの使用により、無効または悪意のあるデータがビジネスロジックレイヤーに入ることが効果的に防止されます。
$phone = $_POST['phone'];
$pattern = "/^(\+?\d{1,3}-)?\d{10}$/";
if (preg_match($pattern, $phone)) {
// 電話番号は有効です,処理を続けます
} else {
// 無効な電話番号,ユーザーにプロンプトします
}
この例で使用されている正規表現は、オプションの国の国外局所コードのプレフィックスをサポートしており、電話番号を10桁にする必要があり、入力検証の精度を効果的に改善します。
$comment = $_POST['comment'];
$encoded_comment = htmlspecialchars($comment);
// エンコードされたコメントをデータベースに保存するか、ページに表示します
攻撃者がスクリプトタグを注入する場合でも、 <and>などの特殊文字を逃れることにより、ブラウザによって解析されて実行されることはなく、悪意のある動作を回避します。
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->bindParam(":username", $username);
$username = $_POST['username'];
$stmt->execute();
文字列を直接スプライする代わりにパラメーターを結合することにより、入力データが自動的に逃げられ、噴射挙動を効果的に防ぐことができます。