php 필터 구현 코드

9434 단어 php여과기
이전에 한 사용자가 인터넷을 통해 주로 정보를 얻었다.현재의 인터넷은 사용자와의 상호작용을 더욱 중시하기 때문에 사용자는 더 이상 사이트의 방문자가 아니라 사이트 내용의 제조자이다.이전의 단순한'읽기'에서'쓰기'와'공동 창작'으로 발전하고 수동적인 정보 수신에서 주동적인 지점 정보로 발전한다.이에 따른 안전 문제도 웹 개발자들이 무시할 수 없는 문제가 되었고 제3자의 출처를 검증하는 데이터는 모든 웹 프로그램에 없어서는 안 될 기능이 되었다.이전에 PHP는 데이터를 검증해야 하는데 일반적으로 프로그래머가 정규 표현식을 통해 실현했다. PHP는 5.2부터 원래의 PCEL에 있는 filter 함수를 내장 라이브러리로 옮겼고 많은 강화를 하여 이러한 함수로 데이터에 대한 필터와 검증을 실현할 수 있다.데이터 원본 및 검증 유형 PHP의 데이터 원본은 두 부분을 포함하는데 하나는 외부 변수(예를 들어 POST, GET, COOKIE 등)이고 다른 하나는 페이지 내부에서 발생하는 데이터이다.PHP는 이 두 데이터 유형에 대해 각각 ilter_ 를 정의합니다.input_**및 filter_var_**계열 함수.검증 방법에 따라 Validating과 Sanitizing 두 가지로 나눌 수 있다.Validating은 데이터를 검증하고 부울 값을 되돌려 주는 데 사용됩니다.Sanitizing은 규칙에 따라 특정한 문자를 필터하고 처리된 문자열을 되돌려줍니다.간단한 사용법, 예를 들어 문자열이 정수인지 검증하는 것, 이전에 우리는 정규 표현식이나 is_를 통해numeric 함수 구현:
 
$str = '51ab';
preg_match('/^[0-9]*$/', $str);
is_numeric($str);
새로운 검증 함수는 다음과 같은 방식으로 사용할 수 있다. $str ='51ab'.echo filter_var($str, FILTER_VALIDATE_INT) ? 'is valid' : 'is not valid';FILTER_VALIDATE_INT는 $str가 정수인지 확인하는 PHP 정의 필터입니다.실제로 이것은 echo FILTER_를 통해 수치 상수입니다.VALIDATE_INT;검색 값은 257입니다.그래서 우리도 사용할 수 있다: $str ='51ab'.echo filter_var($str, 257) ? 'is valid' : 'is not valid';PHP에 자주 사용되는 필터가 많이 정의되어 있습니다. filter_list () 에서 지원하는 모든 필터 이름 (문자열로 표시) 을 얻은 다음 filter_id(string) 수치 가져오기:print_r(filter_list());//지원되는 모든 필터 이름입니다.echo '========='; echo filter_id('int');//'int'는 filter _list가 반환하는 필터 이름입니다.이상은 다음과 같은 내용을 입력합니다:array(0=>int', 1=>'boolean', 2=>'float', 3=>'validate_regexp')=============== 257Sanitizing 필터 위에 있는 것은 데이터 형식이 정확한지 확인하는 것입니다. 때로는 무관한 내용을 필터하는 것도 중요합니다.SANITIZE 필터는 다음과 같은 기능을 제공합니다. 예를 들어 이메일에 남은 문자를 필터링합니다. $email ='alert("test");[email protected]'; echo $email;//직접 출력하면 스크립트 스크립트를 실행합니다.echo filter_var($email, FILTER_SANITIZE_EMAIL);//<&> 출력이 필터링됩니다[email protected]옵션 및 플래그 filter_var의 기능은 여기에 그치지 않고 세 번째 파라미터를 지정하고 특수한 옵션을 추가할 수 있다. 예를 들어 최대 값을 규정한 정수:
 
$options = array(
'options'=>array('max_range'=>50),
'flags'=>FILTER_FLAG_ALLOW_OCTAL,
);
$str = '51';
echo filter_var($str, FILTER_VALIDATE_INT, $options) ? 'is valid' : 'is not valid';
위에서 is not valid로 되돌아옵니다.왜냐하면 max_range는 최대치를 50까지만 정합니다.FILTER_FLAG_ALLOW_OCTAL에서 검증할 수 있는 데이터는 8진수, 즉 0으로 시작됩니다. $options 매개 변수는 두 개의 요소를 포함하는 수조입니다. options와flags입니다.만약flags 원소만 있다면 수조를 사용하지 않고 직접 전달할 수 있다.외부 데이터 검증은 PHP 스크립트가 자체 생성한 데이터를 제외하고 사용자가 제출한 데이터가 대부분을 차지한다.물론 저희가 직접 filter를 써도 돼요.var 필터링:
 
if(isset($_GET['age']))
{
echo filter_var($_GET['age'], FILTER_VALIDATE_INT) ? 'is valid' : 'is not valid';
}
그러나 PHP에는 외부 소스를 검증하는 데 사용되는 몇 가지 함수가 있습니다
 
if(filter_has_var(INPUT_GET, 'age'))
{
echo filter_input(INPUT_GET, 'age', FILTER_VALIDATE_INT) ? 'is valid' : 'is not valid';
}
filter_ 대비var,filter_input에는 데이터의 출처를 지정하는 데 사용할 매개 변수가 하나 더 있습니다.그리고 filter_has_var () 는 지정된 데이터가 있는지 판단하는 데 사용됩니다.한 번에 여러 개의 데이터를 필터링하는 PHP는 filter_var_array 및 filter_input_array 함수는 여러 개의 데이터를 한꺼번에 검증하는 데 사용됩니다.이것은 php에서 온 것이다.net의 실례, filter_ 설명var_array () 를 어떻게 사용하는지..
 
$data = array(
'product_id' => 'libgd<script>',
'component' => '10',
'versions' => '2.0.33',
'testscalar' => array('2', '23', '10', '12'),
'testarray' => '2',
);

$args = array(
'product_id' => FILTER_SANITIZE_ENCODED,
'component' => array('filter' => FILTER_VALIDATE_INT,
'flags' => FILTER_FORCE_ARRAY,
'options' => array('min_range' => 1, 'max_range' => 10)
),
'versions' => FILTER_SANITIZE_ENCODED,
'doesnotexist' => FILTER_VALIDATE_INT,
'testscalar' => array(
'filter' => FILTER_VALIDATE_INT,
'flags' => FILTER_REQUIRE_SCALAR,
),
'testarray' => array(
'filter' => FILTER_VALIDATE_INT,
'flags' => FILTER_FORCE_ARRAY,
)
);
$myinputs = filter_var_array($data, $args);
사용자 정의 필터는 특수한 필터를 통해 FILTER_CALLBACK은 사용자 정의 필터를 지정합니다. 아래 필터는 모든 메일 주소의 @를 # 로 변환합니다
 
function fun($value)
{
return strtr($value,'@','#');
}
$var = filter_var('[email protected]', FILTER_CALLBACK, array('options' => 'fun'));
echo $var;

其它


ID(필터 상수)
이름(filter_list() 함수가 반환하는 이름)
사용 가능한 옵션
표지 위치
묘사
Validating
FILTER_VALIDATE_BOOLEAN
"boolean"
FILTER_NULL_ON_FAILURE
어려운 데이터가 "1", "true", "on", "yes"일 때true를 되돌려줍니다. 그렇지 않으면false를 되돌려줍니다.FILTER_가 설정된 경우NULL_ON_failure 로고 위치는 "0", "false", "off", "no", "만 false를 되돌리고 다른 비true 값은null을 되돌려줍니다.
FILTER_VALIDATE_EMAIL
"validate_email"
메일박스 확인
FILTER_VALIDATE_FLOAT
"float"
decimal
FILTER_FLAG_ALLOW_THOUSAND
부동 소수점 확인
FILTER_VALIDATE_INT
"int"
min_range, max_range
FILTER_FLAG_ALLOW_OCTAL, FILTER_FLAG_ALLOW_HEX
지정된 범위 내의 정수 값 확인
FILTER_VALIDATE_IP
"validate_ip"
FILTER_FLAG_IPV4, FILTER_FLAG_IPV6, FILTER_FLAG_NO_PRIV_RANGE, FILTER_FLAG_NO_RES_RANGE
IP 주소 확인
FILTER_VALIDATE_REGEXP
"validate_regexp"
regexp
정규 표현식 검증
FILTER_VALIDATE_URL
"validate_url"
FILTER_FLAG_PATH_REQUIRED, FILTER_FLAG_QUERY_REQUIRED
URL 확인
Sanitizing
FILTER_SANITIZE_EMAIL
"email"
영문자 제외, 숫자 및! #$% &'*+-/=?^_'{|}~@.[] 이외의 문자입니다.
FILTER_SANITIZE_ENCODED
"encoded"
FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_ENCODE_HIGH
URL 인코딩 문자열, 지정한 문자열을 제거하거나 인코딩합니다.
FILTER_SANITIZE_MAGIC_QUOTES
"magic_quotes"
addslashes () 함수 적용
FILTER_SANITIZE_NUMBER_FLOAT
"number_float"
FILTER_FLAG_ALLOW_FRACTION, FILTER_FLAG_ALLOW_THOUSAND, FILTER_FLAG_ALLOW_SCIENTIFIC
제거 숫자, +- 및.,eE 이외의 문자
FILTER_SANITIZE_NUMBER_INT
"number_int"
숫자 및 + - 이외의 문자 제거
FILTER_SANITIZE_SPECIAL_CHARS
"special_chars"
FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_HIGH
HTML 이스케이프 문자,'&><및 ASCII 값이 32보다 작은 문자. 그리고 기타 지정된 문자.
FILTER_SANITIZE_STRING
"string"
FILTER_FLAG_NO_ENCODE_QUOTES, FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_ENCODE_HIGH, FILTER_FLAG_ENCODE_AMP
탭을 제거하거나 지정한 문자를 제거하거나 인코딩합니다.
FILTER_SANITIZE_STRIPPED
"stripped"
Alias of "string"filter.
FILTER_SANITIZE_URL
"url"
문자, 숫자 및 $-_.+를 제외한 모든 문자를 삭제합니다!*'(),{}|\\^~[]`<>#%";/?:@&=
FILTER_UNSAFE_RAW
"unsafe_raw"
FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_ENCODE_HIGH, FILTER_FLAG_ENCODE_AMP
아무런 변경도 하지 않거나, 표지판에 따라 알파벳을 제거하거나 인코딩해서 지정합니다.
FILTER_CALLBACK
"callback"
FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_ENCODE_HIGH, FILTER_FLAG_ENCODE_AMP
사용자 정의 필터

标志位


ID
사용 가능한 필터
묘사
FILTER_FLAG_STRIP_LOW
FILTER_SANITIZE_ENCODED, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_SANITIZE_STRING, FILTER_UNSAFE_RAW
ASCII 32보다 작은 문자를 제거합니다.
FILTER_FLAG_STRIP_HIGH
FILTER_SANITIZE_ENCODED, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_SANITIZE_STRING, FILTER_UNSAFE_RAW
ASCII가 127에 있는 문자를 제거합니다.
FILTER_FLAG_ALLOW_FRACTION
FILTER_SANITIZE_NUMBER_FLOAT
소수점 구분자 허용 (.)
FILTER_FLAG_ALLOW_THOUSAND
FILTER_SANITIZE_NUMBER_FLOAT, FILTER_VALIDATE_FLOAT
천 자리 구분자 허용 (,)
FILTER_FLAG_ALLOW_SCIENTIFIC
FILTER_SANITIZE_NUMBER_FLOAT
과학 계수법 (e 또는 E) 을 허용합니다.
FILTER_FLAG_NO_ENCODE_QUOTES
FILTER_SANITIZE_STRING
큰따옴표 (큰따옴표와 큰따옴표) 를 인코딩하지 않습니다.
FILTER_FLAG_ENCODE_LOW
FILTER_SANITIZE_ENCODED, FILTER_SANITIZE_STRING, FILTER_SANITIZE_RAW
ASCII가 32보다 작은 문자를 인코딩합니다.
FILTER_FLAG_ENCODE_HIGH
FILTER_SANITIZE_ENCODED, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_SANITIZE_STRING, FILTER_SANITIZE_RAW
ASCII가 127보다 큰 문자를 인코딩합니다.
FILTER_FLAG_ENCODE_AMP
FILTER_SANITIZE_STRING, FILTER_SANITIZE_RAW
인코딩 & 기호.
FILTER_NULL_ON_FAILURE
FILTER_VALIDATE_BOOLEAN
검증 데이터가 다음 문자열이 아닐 때 (yes, no, 1,0,true,false,on,off) 되돌려줍니다.
FILTER_FLAG_ALLOW_OCTAL
FILTER_VALIDATE_INT
8진수 값을 허용합니다(0 시작).
FILTER_FLAG_ALLOW_HEX
FILTER_VALIDATE_INT
16진수 값을 허용합니다.(0X 또는 0x로 시작).
FILTER_FLAG_IPV4
FILTER_VALIDATE_IP
IP4 형식 문자열.
FILTER_FLAG_IPV6
FILTER_VALIDATE_IP
IP6 형식 문자열.
FILTER_FLAG_NO_PRIV_RANGE
FILTER_VALIDATE_IP
RFC에서 지정한 개인 도메인 IPIP4는 다음과 같은 범위 10.0.0/8, 172.16.0.0/12, 192.168.0.0/16입니다.또는 IP6 다음으로 시작하는 도메인: FD 또는 FC
FILTER_FLAG_NO_RES_RANGE
FILTER_VALIDATE_IP
요구 사항은 예약된 IP 범위에 없습니다.IPv4 ranges:0.0.0.0/8, 169.254.0.0/16,192.0.2.0/24 and 224.0.0.0/4.IP6에는 적용할 수 없습니다.
FILTER_FLAG_PATH_REQUIRED
FILTER_VALIDATE_URL
URL에 경로 섹션이 포함되어야 합니다.
FILTER_FLAG_QUERY_REQUIRED
FILTER_VALIDATE_URL
URL 질의 문자열이 필요합니다.

좋은 웹페이지 즐겨찾기