PHP Filter是一个扩展, 可通过清理或验证数据来过滤数据。它在网站安全中起着至关重要的作用, 尤其是当数据来自未知或外部来源(例如用户提供的输入)时, 此功能特别有用。例如, 来自HTML表单的数据。
主要有以下两种类型的过滤器:
- 验证:用于验证或检查数据是否符合某些条件。例如, 传递FILTER_VALIDATE_URL将确定数据是否为有效的url, 但不会自行更改现有数据。
- 消毒:与验证不同, 清理将对数据进行清理, 以便通过删除或更改数据来确保没有不想要的字符。例如, 传递FILTER_SANITIZE_EMAIL将删除所有不适合包含电子邮件地址的字符。也就是说, 它不会验证数据。
范例1:PHP程序使用FILTER_VALIDATE_URL过滤器来验证URL。
<?php
// PHP program to validate URL
// Declare variable and initialize it to URL
$url = "https://www.lsbin.org" ;
// Use filter function to validate URL
if (filter_var( $url , FILTER_VALIDATE_URL)) {
echo ( "valid URL" );
}
else {
echo ( "Invalid URL" );
}
?>
范例2:PHP程序使用FILTER_VALIDATE_EMAIL过滤器来验证电子邮件。
<?php
// PHP program to validate email
// Declare variable and initialize it to email
$email = "xyz@gmail.com" ;
// Use filter function to validate email
if (filter_var( $email , FILTER_VALIDATE_EMAIL)) {
echo "Valid Email" ;
}
else {
echo "Invalid Email" ;
}
?>
过滤功能:过滤功能用于过滤来自不安全来源的数据。
- filter_var():过滤特定变量
- filter_var_array():过滤多个变量, 即变量数组
- filter_has_var():检查特定输入类型的变量是否存在
- filter_id():帮助获取指定过滤器名称的过滤器ID
- filter_list():以数组形式返回受支持的过滤器名称的列表。
- filter_input():获取一个外部变量并对其进行过滤(如果设置为这样做的话)。
- filter_input_array():与filter_input()相同, 但在这里获取多个变量, 即变量数组, 并设置为过滤它们。
- 验证过滤器常量:
- FILTER_VALIDATE_BOOLEAN:验证布尔值
- FILTER_VALIDATE_INT:验证整数
- FILTER_VALIDATE_FLOAT:验证浮点数
- FILTER_VALIDATE_REGEXP:验证正则表达式
- FILTER_VALIDATE_IP:验证IP地址
- FILTER_VALIDATE_EMAIL:验证电子邮件地址
- FILTER_VALIDATE_URL:验证URL
- 清理过滤器常量:
- FILTER_SANITIZE_EMAIL:从电子邮件地址中删除所有非法字符
- FILTER_SANITIZE_ENCODED:删除/编码特殊字符
- FILTER_SANITIZE_MAGIC_QUOTES:应用addslashes()函数
- FILTER_SANITIZE_NUMBER_FLOAT:删除所有字符, 除了数字, +-和可选的.e e
- FILTER_SANITIZE_NUMBER_INT:删除除数字和+ –以外的所有字符
- FILTER_SANITIZE_SPECIAL_CHARS:删除特殊字符
- FILTER_SANITIZE_FULL_SPECIAL_CHARS可以使用FILTER_FLAG_NO_ENCODE_QUOTES禁用编码引号。
- FILTER_SANITIZE_STRING:从字符串中删除标签/特殊字符
- FILTER_SANITIZE_STRIPPED:FILTER_SANITIZE_STRING的别名
- FILTER_SANITIZE_URL:从s网址中删除所有非法字符
- 其他过滤器常数:
- FILTER_UNSAFE_RAW:不执行任何操作, 可以选择去除/编码特殊字符
- FILTER_CALLBACK:调用用户定义的函数来过滤数据
注意:默认情况下, PHP 5.2.0和更高版本中启用了PHP过滤器。安装需要较旧的版本。
参考: http://php.net/manual/en/filter.filters.sanitize.php