>  기사  >  백엔드 개발  >  PHP 필터 filter_php 예제의 종합 분석

PHP 필터 filter_php 예제의 종합 분석

WBOY
WBOY원래의
2016-08-17 13:02:361411검색

PHP 필터는 사용자 입력과 같은 비보안 소스의 데이터를 검증하고 필터링하는 데 사용됩니다.

PHP 필터란 무엇인가요?

PHP 필터는 안전하지 않은 소스의 데이터를 검증하고 필터링하는 데 사용됩니다.

사용자 입력 또는 맞춤 데이터를 검증하고 필터링하는 것은 모든 웹 애플리케이션에서 중요한 부분입니다.

PHP용 필터 확장은 데이터 필터링을 더 쉽고 빠르게 만들기 위해 설계되었습니다.

필터를 사용하는 이유는 무엇인가요?

거의 모든 웹 애플리케이션은 외부 입력에 의존합니다. 이 데이터는 일반적으로 사용자 또는 기타 애플리케이션(예: 웹 서비스)에서 제공됩니다. 필터를 사용하면 애플리케이션이 올바른 입력 유형을 얻도록 할 수 있습니다.

외부 데이터는 항상 필터링해야 합니다!

입력 필터링은 가장 중요한 애플리케이션 보안 주제 중 하나입니다.

외부 데이터란 무엇인가요?

•양식에서 데이터 입력

•쿠키

•서버 변수

•데이터베이스 쿼리 결과

기능 및 필터

변수를 필터링하려면 다음 필터 기능 중 하나를 사용하세요.

•filter_var() - 지정된 필터로 단일 변수를 필터링합니다

•filter_var_array() - 동일하거나 다른 필터를 사용하여 여러 변수를 필터링합니다

•filter_input - 입력 변수를 가져와서 필터링합니다.

• filter_input_array - 여러 입력 변수를 가져와 동일하거나 다른 필터를 통해 필터링합니다.

아래 예에서는 filter_var() 함수를 사용하여 정수의 유효성을 검사합니다.

<&#63;php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
{
echo("Integer is not valid");
}
else
{
echo("Integer is valid");
}
&#63;> 

위 코드는 "FILTER_VALIDATE_INT" 필터를 사용하여 변수를 필터링합니다. 이 정수는 유효하므로 코드 출력은 "정수는 유효합니다"입니다.

정수가 아닌 변수를 사용하려고 하면 "정수가 유효하지 않습니다."라는 결과가 출력됩니다.

함수 및 필터의 전체 목록을 보려면 PHP 필터 참조 매뉴얼을 방문하세요.

검증 및 삭제

필터에는 두 가지 유형이 있습니다.

필터 확인 중:

• 사용자 입력을 확인하는 데 사용됩니다

• 엄격한 형식 규칙(예: URL 또는 이메일 확인)

• 성공하면 예상 유형을 반환하고, 실패하면 FALSE를 반환합니다.

필터 살균:

•문자열에서 특정 문자를 허용하거나 금지하는 데 사용됩니다

•데이터 형식 규칙 없음

•항상 문자열을 반환합니다

옵션 및 플래그

옵션과 플래그는 지정된 필터에 추가 필터링 옵션을 추가하는 데 사용됩니다.

필터마다 옵션과 플래그가 다릅니다.

아래 예에서는 "min_range" 및 "max_range" 옵션과 함께 filter_var()를 사용하여 정수의 유효성을 검사합니다.

<&#63;php
$var=300;
$int_options = array(
"options"=>array
(
"min_range"=>0,
"max_range"=>256
)
);
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options))
{
echo("Integer is not valid");
}
else
{
echo("Integer is valid");
}
&#63;> 

위 코드와 마찬가지로 옵션도 "options"라는 관련 배열에 넣어야 합니다. 플래그를 사용하는 경우 배열에 있을 필요는 없습니다.

정수는 지정된 범위 내에 있지 않은 "300"이므로 위 코드의 출력은 "정수가 유효하지 않습니다"입니다.

함수 및 필터의 전체 목록을 보려면 W3School에서 제공하는 PHP 필터 참조 매뉴얼을 방문하세요. 각 필터에 사용 가능한 옵션과 플래그를 볼 수 있습니다.

입력 유효성 검사

양식에서 입력된 내용을 확인해 보겠습니다.

가장 먼저 해야 할 일은 찾고 있는 입력 데이터가 존재하는지 확인하는 것입니다.

그런 다음 filter_input() 함수를 사용하여 입력 데이터를 필터링합니다.

다음 예에서는 입력 변수 "email"이 PHP 페이지에 전달됩니다.

<&#63;php
if(!filter_has_var(INPUT_GET, "email"))
{
echo("Input type does not exist");
}
else
{
if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
{
echo "E-Mail is not valid";
}
else
{
echo "E-Mail is valid";
}
}
&#63;>

예제 설명:

위의 예에는 "GET" 메소드를 통해 전달된 입력 변수(이메일)가 있습니다.

1. "GET" 유형의 "email" 입력 변수가 있는지 확인하세요.

2. 입력변수가 있다면 유효한 이메일 주소인지 확인하세요

입력 정화

양식에서 전달된 URL을 정리해 보겠습니다.

먼저 찾고 있는 입력 데이터가 존재하는지 확인하고 싶습니다.

그런 다음 filter_input() 함수를 사용하여 입력 데이터를 정제합니다.

다음 예에서는 입력 변수 "url"이 PHP 페이지에 전달됩니다.

<&#63;php
if(!filter_has_var(INPUT_POST, "url"))
{
echo("Input type does not exist");
}
else
{
$url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL);
}
&#63;> 

例子解释:

上面的例子有一个通过 "POST" 方法传送的输入变量 (url):

1.检测是否存在 "POST" 类型的 "url" 输入变量

2.如果存在此输入变量,对其进行净化(删除非法字符),并将其存储在 $url 变量中

假如输入变量类似这样:"http://www.W3非o法ol.com.c字符n/",则净化后的 $url 变量应该是这样的:
http://www.W3School.com.cn/

过滤多个输入

表单通常由多个输入字段组成。为了避免对 filter_var 或 filter_input 重复调用,我们可以使用 filter_var_array 或 the filter_input_array 函数。

在本例中,我们使用 filter_input_array() 函数来过滤三个 GET 变量。接收到的 GET 变量是一个名字、一个年龄以及一个邮件地址:

<&#63;php
$filters = array
(
"name" => array
(
"filter"=>FILTER_SANITIZE_STRING
),
"age" => array
(
"filter"=>FILTER_VALIDATE_INT,
"options"=>array
(
"min_range"=>1,
"max_range"=>120
)
),
"email"=> FILTER_VALIDATE_EMAIL,
);
$result = filter_input_array(INPUT_GET, $filters);(array(3) { ["name"]=> string(1) "1" ["age"]=> bool(false) ["email"]=> string(8) "1@qq.com" })
if (!$result["age"])
{
echo("Age must be a number between 1 and 120.<br />");
}
elseif(!$result["email"])
{
echo("E-Mail is not valid.<br />");
}
else
{
echo("User input is valid");
}
&#63;> 

例子解释:

上面的例子有三个通过 "GET" 方法传送的输入变量 (name, age and email)

1.设置一个数组,其中包含了输入变量的名称,以及用于指定的输入变量的过滤器

2.调用 filter_input_array 函数,参数包括 GET 输入变量及刚才设置的数组

3.检测 $result 变量中的 "age" 和 "email" 变量是否有非法的输入。(如果存在非法输入,)

filter_input_array() 函数的第二个参数可以是数组或单一过滤器的 ID。

如果该参数是单一过滤器的 ID,那么这个指定的过滤器会过滤输入数组中所有的值。

如果该参数是一个数组,那么此数组必须遵循下面的规则:

•必须是一个关联数组,其中包含的输入变量是数组的键(比如 "age" 输入变量)

•此数组的值必须是过滤器的 ID ,或者是规定了过滤器、标志以及选项的数组

使用 Filter Callback

通过使用 FILTER_CALLBACK 过滤器,可以调用自定义的函数,把它作为一个过滤器来使用。这样,我们就拥有了数据过滤的完全控制权。

您可以创建自己的自定义函数,也可以使用已有的 PHP 函数。

规定您准备用到过滤器函数的方法,与规定选项的方法相同。

在下面的例子中,我们使用了一个自定义的函数把所有 "_" 转换为空格:

<&#63;php
function convertSpace($string)
{
return str_replace("_", " ", $string);
}
$string = "Peter_is_a_great_guy!";
echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace"));
&#63;> 

以上代码的结果是这样的:

Peter is a great guy!

例子解释:

上面的例子把所有 "_" 转换成空格:

1.创建一个把 "_" 替换为空格的函数

2.调用 filter_var() 函数,它的参数是 FILTER_CALLBACK 过滤器以及包含我们的函数的数组

以上所述是小编给大家介绍的PHP Filter过滤器全面解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.