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)가 있습니다:
- "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非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)
- 입력 변수의 이름을 포함한 배열을 설정합니다. 지정된 입력 변수에 대한 필터를 사용합니다
- filter_input_array 함수를 호출하여, 매개변수로 GET 입력 변수 및 just now 설정한 배열을 포함합니다
- $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입니다!
예제 설명:
위의 예제는 모든 "_"를 공백으로 변환합니다:
- "_"를 공백으로 대체하는 함수를 생성합니다
- filter_var() 함수를 호출하여, 그 파라미터는 FILTER_CALLBACK 필터 및 우리의 함수를 포함한 배열입니다