PHP 필터
PHP 필터
PHP 필터는 사용자 입력과 같은 비보안 소스의 데이터를 검증하고 필터링하는 데 사용됩니다.
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" 필터를 사용하여 변수를 필터링합니다. 이 정수는 적법하므로 위 코드는 다음과 같이 출력됩니다.
is a legal 정수
정수가 아닌 변수(예: "123abc"), "정수가 유효하지 않습니다."가 출력됩니다.
함수 및 필터의 전체 목록을 보려면 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("不是一个合法的整数"); } else { echo("是个合法的整数"); } ?>위의 코드와 마찬가지로 옵션을 입력해야 합니다. "options"라는 관련 배열에 있습니다. 플래그를 사용하는 경우 배열에 있을 필요는 없습니다. 정수가 "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"; } } ?>위 예의 테스트 결과는 다음과 같습니다. 은 법적 이메일
예제 설명
위의 예에는 "GET" 메소드를 통해 전송된 입력 변수(이메일)가 있습니다.
<?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.pphihΞp.cn/"과 유사한 문자열인 경우 정제된 $url 변수는 다음과 같습니다. //m.sbmmt.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("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_runoob_com!"; echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace")); ?>
위 코드의 결과는 다음과 같습니다.
예제 설명
위의 예는 "_"를 모두 "."로 변환합니다.
1. "_"를 "."로 바꾸는 함수를 만듭니다.
2. filter_var() 함수를 호출합니다. 해당 매개변수는 FILTER_CALLBACK 필터와 함수를 포함하는 배열입니다