>  기사  >  백엔드 개발  >  PHP 필터 관련 지식(Filter)

PHP 필터 관련 지식(Filter)

jacklove
jacklove원래의
2018-05-08 09:22:041404검색

PHP Filter는 사용자 입력과 같은 비보안 소스의 데이터를 확인하고 필터링하는 데 사용됩니다. 이 기사에서는 필터에 대해 자세히 알아볼 것입니다.

PHP 필터란 무엇인가요?

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

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

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

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

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

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

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

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

양식에서 데이터 입력

쿠키

서버 변수

데이터베이스 쿼리 결과

함수 및 필터

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

filter_var() - 전달 필터에 필터 지정 단일 변수

filter_var_array() - 동일하거나 다른 필터로 여러 변수 필터링

filter_input - 입력 변수를 가져와 필터링

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

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

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

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

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

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

검증 및 삭제

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

필터 검증:

사용자 입력을 검증하는 데 사용됩니다.

엄격한 형식 지정 규칙(예: URL 또는 이메일 검증)

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

필터 삭제:

문자열에 지정된 문자를 허용하거나 허용하지 않는 데 사용됩니다.

데이터 형식 규칙이 없습니다.

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

옵션 및 플래그

옵션 및 플래그에 사용됩니다. 필터링 옵션.

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

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

<?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");
 }
?>

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

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

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

입력 유효성 검사

양식의 입력 유효성을 검사해 보겠습니다.

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

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

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

<?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";
  }
 }
?>

예제 설명:

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

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

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

입력 내용을 삭제하세요.

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

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

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

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

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

예제 설명:

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

"POST" 유형의 "url" 입력 변수가 있는지 확인하세요

이 입력 변수가 존재하는 경우 이를 삭제하고(불법 문자 제거) $url 변수에 저장하세요

입력 변수가 다음과 같은 경우: "http: // www.W3 불법 ol.com.c 문자 n/"인 경우 정제된 $url 변수는 다음과 같아야 합니다.

http://www.W3School.com.cn/

다중 입력 필터링

Forms 일반적으로 여러 입력 필드로 구성됩니다. filter_var 또는 filter_input에 대한 반복 호출을 방지하려면 filter_var_array 또는 filter_input_array 함수를 사용할 수 있습니다.

이 예에서는 filter_input_array() 함수를 사용하여 세 개의 GET 변수를 필터링합니다. 수신된 GET 변수는 이름, 나이, 이메일 주소입니다:

<?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);
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");
 }
?>

例子解释:

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

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

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

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

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

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

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

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

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

使用 Filter Callback

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

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

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

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

<?phpfunction convertSpace($string)
{
return str_replace("_", " ", $string);
}$string = "Peter_is_a_great_guy!";
echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace"));
?>

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

Peter is a great guy!

例子解释:

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

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

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

本篇对过滤器进行了讲解,更多的学习资料清关注php中文网即可观看。

相关推荐:

关于对PHP 异常处理的操作

关于PHP 文件打开/读取/读取相关知识

关于PHP Include 文件的讲解

위 내용은 PHP 필터 관련 지식(Filter)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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