$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);
// 将编码后的评论存储到数据库或显示在页面上
通过转义如<、>等特殊字符,攻击者即使注入了脚本标签,也不会被浏览器解析执行,从而避免恶意行为。
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->bindParam(":username", $username);
$username = $_POST['username'];
$stmt->execute();
通过绑定参数而不是直接拼接字符串,可以确保输入数据被自动转义,有效防止注入行为。