PHP 필터LOGIN

PHP 필터

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


PHP 필터란 무엇인가요?

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

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

PHP의 필터 확장은 데이터 필터링을 더 쉽고 빠르게 할 수 있도록 설계되었습니다.


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

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

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

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

외부데이터란?

· 양식 입력 데이터

· 쿠키

· 웹 서비스 데이터

· 서버 변수

· 데이터베이스 쿼리 결과


기능 및 필터

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

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

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

· filter_input - 입력 변수를 가져와 적용 필터

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


다음 예에서는 filter_var() 함수를 사용하여 정수를 확인했습니다.

FILTER_VALIDATE_INT 필터는 검증 값으로 정수를 사용합니다.

<?php
header("Content-type:text/html;charset=utf-8");
$int = 123;

if(!filter_var($int, FILTER_VALIDATE_INT))
{
    echo("不是一个合法的整数");
}
else
{
    echo("是个合法的整数");
}
?>

프로그램 실행 결과:

은 유효한 정수입니다


전체 기능 및 필터를 보려면 필터 목록을 보려면 PHP 필터 참조 매뉴얼을 방문하세요.


검증 및 삭제

두 가지 종류의 필터가 있습니다.

검증 필터링 컨테이너:

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

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

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

위생 필터:

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

· 데이터 형식 규칙 없음

· 항상 문자열 반환


옵션 및 플래그

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

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


다음 예에서는 "min_range" 및 "max_range" 옵션과 함께 filter_var()를 사용하여 확인했습니다. 정수 :

<?php
header("Content-type:text/html;charset=utf-8");
$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"이므로 지정된 범위 내에 있지 않으므로 위 코드의 출력은 다음과 같습니다.

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

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


입력 유효성 검사

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

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

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


예제

다음 예에서는 변수 "email"은 GET 메소드에 입력되어 PHP 페이지로 전달됩니다:

<?php
header("Content-type:text/html;charset=utf-8");
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";
    }
}
?>

프로그램 실행 결과:

6.png

설명 예제 포함

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

1. "email" 입력 변수가 있는지 감지합니다. "GET" 유형

2. 입력 변수가 존재하는 경우 유효한 이메일 주소인지 확인하세요


입력 삭제

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

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

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


인스턴스

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

<?php
header("Content-type:text/html;charset=utf-8");
if(!filter_has_var(INPUT_GET, "url"))
{
    echo("没有 url 参数");
}
else
{
    $url = filter_input(INPUT_GET,
        "url", FILTER_SANITIZE_URL);
    echo $url;
}
?>

예제 설명

FILTER_SANITIZE_URL 필터는 문자열에서 모든 불법 URL 문자를 제거합니다.

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

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

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

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

7.png


여러 입력 필터링

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

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

<?php
header("Content-type:text/html;charset=utf-8");
$filters = array
(
    "name" => array
    (
        "filter_has_var"=>FILTER_SANITIZE_STRING
    ),
    "age" => array
    (
        "filter_has_var"=>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("输入正确");
}
?>

프로그램 실행 결과 :

8.png

예제 설명

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

1. 입력 변수 및 지정된 입력 변수

에 사용되는 필터 2. filter_input_array() 함수를 호출하면 매개 변수에는 GET 입력 변수가 포함되고 방금 설정된 배열은

3입니다. 결과 변수 중 "age", "email" 변수에 잘못된 입력이 있나요? (잘못된 입력이 있는 경우 filter_input_array() 함수 사용 후 입력 변수는 FALSE입니다.)

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

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

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

· 입력 변수가 매개변수의 키인 연관 배열이어야 합니다. 배열(예: "age" 입력 변수)

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


필터 콜백 사용

FILTER_CALLBACK 필터는 사용자 정의 함수를 사용하여 값을 필터링합니다

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

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

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

아래 예에서는 사용자 정의 함수를 사용합니다. "_"에서 "."

<?php
header("Content-type:text/html;charset=utf-8");
function convertSpace($string)
{
    return str_replace("_", ".", $string);
}
$string = "www_php_cn!";
echo filter_var($string, FILTER_CALLBACK,
    array("options"=>"convertSpace"));
?>

프로그램 실행 결과:

www.php.cn!

예제 설명

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

1. "_"를 "."으로 바꿉니다.

2. FILTER_CALLBACK 필터와 함수가 포함된 배열인 filter_var() 함수를 호출합니다.

다음 섹션
<?php header("Content-type:text/html;charset=utf-8"); $int = 123; if(!filter_var($int, FILTER_VALIDATE_INT)) { echo("不是一个合法的整数"); } else { echo("是个合法的整数"); } ?>
코스웨어