PHP 필터(FILTER)

PHP 필터는 사용자 입력과 같은 비안전한 출처에서 온 데이터를 검증하고 필터링하는 데 사용됩니다.

PHP 필터는 무엇인가요?

PHP 필터는 비안전한 출처에서 온 데이터를 검증하고 필터링하는 데 사용됩니다.

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

PHP 필터 확장을 설계한 목적은 데이터 필터링을 더 쉽고 빠르게 만드는 것입니다.

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

几乎所有 웹 애플리케이션은 외부 입력에 의존합니다. 이 데이터는 일반적으로 사용자나 다른 애플리케이션(예: 웹 서비스)에서 옵니다. 필터를 사용하면 애플리케이션이 올바른 입력 유형을 받을 수 있도록 보장할 수 있습니다.

Всегда фильтруйте внешние данные!}

Фильтрация ввода является одним из важнейших аспектов безопасности приложений.

Что такое внешние данные?

  • входные данные из формы
  • cookies
  • системные переменные сервера
  • результаты запроса базы данных

Функции и фильтры

Для фильтрации переменных используйте одну из следующих фильтрующих функций:

  • filter_var() - фильтрация одной переменной с использованием указанного фильтра
  • filter_var_array() - фильтрация нескольких переменных с использованием одинаковых или различных фильтров
  • filter_input - получение одной входной переменной и фильтрация её
  • filter_input_array - получение нескольких входных переменных и фильтрация их с использованием одинаковых или различных фильтров

В следующем примере мы используем функцию filter_var() для проверки целого числа:

<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
 {
 echo("整数은 유효하지 않습니다");
 }
else
 {
 echo("整数은 유효합니다");
 }
?>

Указанный код использует фильтр "FILTER_VALIDATE_INT" для фильтрации переменной. Поскольку это целое число является действительным, вывод кода: "Integer is valid"。

Если мы попробуем использовать переменную, которая не является целым числом, то вывод будет: "Integer is not valid"。

Для получения полного списка функций и фильтров обратитесь к нашему PHP 필터 참조 매뉴얼

Validating и Sanitizing

существуют два фильтра:

Validating 필터:

  • используется для проверки ввода пользователя
  • строгие правила формата (например, проверка URL или E-Mail)
  • 성공하면 예상되는 타입을 반환하고, 실패하면 FALSE를 반환합니다

Sanitizing 필터:

  • 문자열에서 지정된 문자를 허용하거나 금지하는 데 사용됩니다
  • 데이터 형식 규칙 없음
  • 항상 문자열을 반환합니다

옵션과 플래그

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

다른 필터는 다른 옵션과 플래그를 가집니다。

아래의 예제에서는 filter_var()와 "min_range" 및 "max_range" 옵션을 사용하여 정수를 검증했습니다:

<?php
$var=300;
$int_options = array(
"options"=>array
 (
 "min_range"=>0,
 "max_range"=>256
 )
);
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options))
 {
 echo("整数은 유효하지 않습니다");
 }
else
 {
 echo("整数은 유효합니다");
 }
?>

위 코드와 마찬가지로, 옵션은 "options"라는 관련 배열에 넣어야 합니다. 플래그를 사용하면 배열에 넣지 않아도 됩니다.

정수 "300"는 지정된 범위에 없기 때문에, 이 코드의 출력은 "Integer is not valid"입니다.

전체 함수 및 필터 목록을 보려면 CodeW3C.com에서 제공하는 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)가 있습니다:

  1. "GET" 타입의 "email" 입력 변수가 존재하는지 확인합니다
  2. 입력 변수가 존재하면, 이가 유효한 이메일 주소인지 확인합니다

입력 정화

양식에서 전달된 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)가 있습니다:

  1. "POST" 타입의 "url" 입력 변수가 존재하는지 확인합니다
  2. 이 입력 변수가 존재하면, 이를 정화(비법적 문자 제거)하고 $url 변수에 저장합니다

입력 변수가 다음과 같은 경우: "http://www.W3非o法ol.com.c字符n/",净化된 $url 변수는 다음과 같아야 합니다:

http://www.codew3c.com/

여러 입력을 필터링

폼은 일반적으로 여러 입력 필드로 구성됩니다. 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("나이는 1과 120 사이의 숫자여야 합니다.<br />");
 }
elseif (!$result["email"])
 {
 echo("이메일이 유효하지 않습니다.<br />");
 }
else
 {
 echo("사용자 입력이 유효합니다");
 }
?>

예제 설명:

위의 예제는 "GET" 메서드로 전송된 세 가지 입력 변수를 가지고 있습니다 (name, age and email)

  1. 입력 변수의 이름을 포함한 배열을 설정합니다. 지정된 입력 변수에 대한 필터를 사용합니다
  2. filter_input_array 함수를 호출하여, 매개변수로 GET 입력 변수 및 just now 설정한 배열을 포함합니다
  3. $result 변수의 "age"와 "email" 변수가 불법적인 입력을 가지고 있는지 검사합니다。(불법적인 입력이 있으면,)

filter_input_array() 함수의 두 번째 매개변수는 배열 또는 단일 필터器的 ID일 수 있습니다。

만약 이 매개변수가 단일 필터器的 ID라면, 이 지정된 필터는 입력 배열의 모든 값을 필터링합니다。

만약 이 매개변수가 배열이면, 이 배열은 다음 규칙을 따라야 합니다:

  • 입력 변수는 배열의 키(예: "age" 입력 변수)를 포함하는 연관 배열이어야 합니다
  • 이 배열의 값은 필터의 ID여야하거나 필터, 플래그 및 옵션을 정의한 배열이어야 합니다

Filter Callback 사용

FILTER_CALLBACK 필터를 사용하여 사용자 정의 함수를 호출하여 필터로 사용할 수 있습니다. 이렇게 하면 데이터 필터링에 대한 완전한 통제를 가질 수 있습니다

사용자 정의 함수를 생성하거나 기존 PHP 함수를 사용할 수 있습니다

필터 함수를 사용하는 방법과 옵션을 설정하는 방법과 동일하게 필터 함수를 사용하는 방법을 정의합니다

다음 예제에서는 모든 "_"를 공백으로 변환하는 사용자 정의 함수를 사용했습니다:

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

위의 코드의 결과는 다음과 같습니다:

Peter는 great guy입니다!

예제 설명:

위의 예제는 모든 "_"를 공백으로 변환합니다:

  1. "_"를 공백으로 대체하는 함수를 생성합니다
  2. filter_var() 함수를 호출하여, 그 파라미터는 FILTER_CALLBACK 필터 및 우리의 함수를 포함한 배열입니다