필터

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("不是一个合法的整数");
}
else
{
         echo("是个合法的整数");
}
?>

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

정수가 아닌 변수(예: "123abc")를 사용하려고 하면 다음이 출력됩니다: " 정수가 유효하지 않습니다."

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

검증 및 삭제

두 가지 필터가 있습니다. QQ截图20161009095342.png

필터 검증:

·​​​​​ ​​사용자 입력

· 엄격한 형식 규칙(예: 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("不是一个合法的整数");
}
else
{
         echo("是个合法的整数");
}
?>

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

정수가 "300"이므로 지정된 범위 내에 있지 않으므로 위 코드의 출력은 다음과 같습니다.

은(는) 유효한 정수가 아닙니다.

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


입력 유효성 검사

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

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

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

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

<?php
if(!filter_has_var(INPUT_GET, "email"))
{
         echo("没有 email 参数");
}
else
{
         if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
         {
                 echo "不是一个合法的 E-Mail";
         }
         else
         {
                 echo "是一个合法的 E-Mail";
         }
}
?>

위 예의 테스트 결과는 다음과 같습니다.


QQ截图20161009095013.png

예제 설명

위의 예는 입력 변수(이메일)가 "GET" 메소드:

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

2. 입력 변수가 있으면 유효한 e인지 확인합니다. -메일 주소


입력 삭제

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

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

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

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

<?php
if(!filter_has_var(INPUT_GET, "url"))
{
         echo("没有 url 参数");
}
else
{
         $url = filter_input(INPUT_GET,
         "url", FILTER_SANITIZE_URL);
         echo $url;
}
?>

예제 설명

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

1. "GET" 유형의 "url" 입력 변수가 있는지 감지

2. 이 입력 변수가 존재하는 경우 이를 정화합니다(불법 문자 삭제). , $url 변수에 저장합니다.

입력 변수가 "http://www.php.cn /"과 유사한 문자열인 경우 정제된 $url 변수는 다음과 같습니다.


QQ截图20161009095035.png


여러 입력 필터링

양식은 일반적으로 여러 입력 필드로 구성됩니다. 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("E-Mail 不合法<br>");
}
else
{
         echo("输入正确");
}
?>

예제 설명

위의 예에는 3개의 입력 변수(이름, 나이, 이메일)가 있습니다.

1. 입력 변수의 이름과 지정된 입력 변수에 대한 필터를 포함하는 배열을 설정합니다.

2. filter_input_array() 함수를 호출하면 매개변수에는 GET 입력 변수와 방금 설정한 배열이 포함됩니다.

3. $result 변수의 "age" 및 "email" 변수에 잘못된 입력이 있는지 감지합니다. (잘못된 입력이 있는 경우 filter_input_array() 함수 사용 후 입력 변수는 FALSE입니다.)

filter_input_array() 함수의 두 번째 인수는 배열이거나 단일 필터의 ID일 수 있습니다.

매개변수가 단일 필터의 ID인 경우 지정된 필터는 입력 배열의 모든 값을 필터링합니다.

매개변수가 배열인 경우 배열은 다음 규칙을 따라야 합니다.

·                                                                         " " " 등                          . 변수)

· 이 배열의 값 필터의 ID이거나 필터, 플래그 및 옵션을 지정하는 배열이어야 합니다.


필터 콜백 사용

FILTER_CALLBACK 필터를 사용하면 다음을 호출할 수 있습니다. 사용자 정의 함수를 만들어 필터로 사용합니다. 이러한 방식으로 우리는 데이터 필터링을 완벽하게 제어할 수 있습니다.

자신만의 맞춤 함수를 만들거나 기존 PHP 함수를 사용할 수 있습니다.

지정된 옵션의 지정 방식에 따라 사용할 필터의 기능을 지정합니다. 이름이 "options"인 연관 배열에서.

아래 예에서는 사용자 정의 함수를 사용하여 모든 "_"를 공백으로 변환합니다.

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

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

QQ截图20161009095054.png


예제 설명

위의 예는 "_"를 모두 ". "로 변환합니다.

1. "_"를 "."으로 바꾸는 함수를 만듭니다.

2. FILTER_CALLBACK 필터와 함수 Array를 포함하는 함수를 사용하는 filter_var() 함수를 호출합니다. 🎜>


지속적인 학습
||
<?php $int = 123; if(!filter_var($int, FILTER_VALIDATE_INT)) { echo("不是一个合法的整数"); } else { echo("是个合法的整数"); } ?>