您好!欢迎访问家园网-www.jy.wang!

家园网

举例讲一讲php的filter_input函数的含义和用法

网络 作者:本站 点击:

PHP的filter_input()函数是用于安全获取并过滤外部输入数据的内置函数,主要用于防御XSS/SQL注入等攻击。以下是详细说明和用法示例:


函数原型

mixed filter_input(int $type, string $var_name, int $filter = FILTER_DEFAULT, mixed $options = null)

参数解析

参数说明
$type输入源类型常量(如INPUT_GETINPUT_POSTINPUT_COOKIE等)
$var_name要获取的变量名(如$_POST['email']中的'email'
$filter过滤器类型(如FILTER_SANITIZE_EMAILFILTER_VALIDATE_INT等)
$options可选配置(如正则表达式、最小/最大值等)

常用过滤器类型

过滤器作用
FILTER_SANITIZE_STRING去除HTML标签
FILTER_SANITIZE_EMAIL清理电子邮件非法字符
FILTER_VALIDATE_INT验证是否为整数
FILTER_VALIDATE_URL验证URL格式
FILTER_SANITIZE_ENCODEDURL编码特殊字符

典型用法示例

1. 获取并清理POST数据

// 清理用户输入的电子邮件
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
if ($email === false) {
    echo "无效的邮箱格式";
}

2. 验证GET参数为整数

// 验证ID是否为1-100的整数
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, [
    'options' => ['min_range' => 1, 'max_range' => 100]
]);
if ($id === null) {
    echo "ID参数缺失";
} elseif ($id === false) {
    echo "ID必须是1-100的整数";
}

3. 批量过滤COOKIE数据

// 清理所有COOKIE中的HTML标签
$clean_cookies = filter_input_array(INPUT_COOKIE, FILTER_SANITIZE_STRING);

注意事项

  1. 返回值

    • 成功时返回过滤后的值

    • 未找到变量时返回null

    • 验证失败时返回false

  2. 与直接访问超全局变量的区别

// 不安全方式
$raw_email = $_POST['email']; // 可能包含恶意代码
// 安全方式
$safe_email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
  1. 性能建议
    对高频访问的参数可缓存过滤结果,避免重复调用:

if (!isset($filtered_id)) {
    $filtered_id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
}

完整案例:表单安全处理

// 处理登录表单
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
$password = filter_input(INPUT_POST, 'password', FILTER_UNSAFE_RAW); // 密码需特殊处理
if ($username && $password) {
    // 安全数据库查询(需配合预处理语句)
    $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
    $stmt->execute([$username]);
}

通过filter_input()可有效减少代码注入风险,是PHP安全编程的基础实践。


标签: