PHP 필터
PHP 필터는 외부 입력의 유효성을 검사하고 살균하는 데 사용된다.
데이터 유효성 검사 = 데이터가 적절한 형식인지 확인한다.
데이터 삭제 = 데이터에서 불법 문자를 제거한다.
필터를 사용하는 이유
많은 웹 응용 프로그램은 외부 입력을 받는다.
외부 입력/데이터는 다음과 같다.
- 양식의 사용자 입력
- 쿠키
- 웹 서비스 데이터
- 서버 변수
- 데이터베이스 쿼리 결과
항상 외부 데이터의 유효성을 검사해야 한다.
잘못 제출 된 데이터는 보안 문제로 이어지고 웹 페이지가 손상 될 수 있다.
PHP 필터를 사용하면 응용 프로그램이 올바른 입력을 얻는지 확인할 수 있다.
PHP 필터 확장
PHP 필터 확장에는 사용자 입력을 검사하는 데 필요한 많은 기능이 있으며 데이터 유효성 검사를 더 쉽고 빠르게 수행하도록 되어있다.
filter_list() 함수는 PHP 필터 확장이 제공하는 것을 나열하는 데 사용할 수 있다.
<!DOCTYPE html> <html> <head> <style> table, th, td { border: 1px solid black; border-collapse: collapse; } th, td { padding: 5px; } </style> </head> <body> <table> <tr> <td>Filter Name</td> <td>Filter ID</td> </tr> <?php foreach (filter_list() as $id =>$filter) { echo '<tr><td>' . $filter . '</td><td>' . filter_id($filter) . '</td></tr>'; } ?> </table> </body> </html>
Filter Name | Filter ID |
int | 257 |
boolean | 258 |
float | 259 |
validate_regexp | 272 |
validate_domain | 277 |
validate_url | 273 |
validate_email | 274 |
validate_ip | 275 |
validate_mac | 276 |
string | 513 |
stripped | 513 |
encoded | 514 |
special_chars | 515 |
full_special_chars | 522 |
unsafe_raw | 516 |
517 | |
url | 518 |
number_int | 519 |
number_float | 520 |
magic_quotes | 521 |
callback | 1024 |
filter_var()
filter_var() 함수는 데이터의 유효성을 검사하고 삭제한다.
filter_var() 함수는 지정된 필터로 단일 변수를 필터링한다.
필터링 하기위해서는 두 가지 데이터가 필요하다.
- 확인하려는 변수
- 사용할 검사 유형
문자열 검사
filter_var() 함수를 사용하여 문자열에서 모든 HTML 태그를 제거한다.
<?php $str = "<h1>안녕하세요!</h1>"; $newstr = filter_var($str, FILTER_SANITIZE_STRING); echo $newstr; ?>
정수 유효성 검사
filter_var() 함수를 사용하여 변수 $int이 정수인지 확인한다.
<?php $int = 100; if (!filter_var($int, FILTER_VALIDATE_INT) === false) { echo("정수는 유효합니다."); } else { echo("정수는 유효하지 않습니다."); ?>
범위 내에서 정수의 유효성 검사
filter_var() 함수를 사용하여 변수가 INT 형식과 1에서 200 사이인지 확인한다.
<?php $int = 122; $min = 1; $max = 200; if (filter_var($int, FILTER_VALIDATE_INT, array("options" => array("min_range"=>$min, "max_range"=>$max))) === false) { echo("변수 값이 올바른 범위 내에 있지 않습니다."); } else { echo("변수 값이 올바른 범위 내에 있습니다."); } ?>
IP 주소 확인
filter_var() 함수를 사용하여 변수 $ip이 유효한 IP 주소인지 확인한다.
<?php $ip = "127.0.0.1"; if (!filter_var($ip, FILTER_VALIDATE_IP) === false) { echo("$ip 는 유효한 IP 주소 입니다."); } else { echo("$ip 는 유효한 IP 주소가 아닙니다."); } ?>
IPv6 주소 유효성 검사
filter_var() 함수를 사용하여 변수 $ip가 유효한 IPv6 주소인지 확인한다.
<?php $ip = "2001:0db8:85a3:08d3:1319:8a2e:0370:7334"; if (!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) { echo("$ip 은 유효한 IPv6 주소 입니다."); } else { echo("$ip 은 유효하지 않은 IPv6 주소 입니다."); } ?>
이메일 유효성 검사
filter_var() 함수를 사용하여 먼저 $email 변수에서 모든 잘못된 문자를 제거한 다음 유효한 전자 메일 주소인지 확인한다.
<?php $email = "i@maz.kr"; $email = filter_var($email, FILTER_SANITIZE_EMAIL); if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) { echo("$email 은 유효한 이메일 주소 입니다."); } else { echo("$email 은 유효하지 않은 이메일 주소 입니다."); } ?>
URL 유효성 검사
filter_var() 함수를 사용하여 URL에서 잘못된 문자를 모두 제거한 다음 $url가 유효한 URL인지 확인한다.
<?php $url = "https://www.maz.kr/"; $url = filter_var($url, FILTER_SANITIZE_URL); if (!filter_var($url, FILTER_VALIDATE_URL) === false) { echo("$url 은 유효한 URL이다."); } else { echo("$url 은 유효하지 않은 URL이다."); } ?>
URL 유효성 검사 – QueryString 포함 여부 확인
filter_var() 함수를 사용하여 변수 $url가 쿼리 문자열이 있는 URL인지 확인한다.
<?php $url = "https://www.maz.kr"; if (!filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED) === false) { echo("$url 은 쿼리 문자열이 있는 올바른 URL입니다."); } else { echo("$url 은 쿼리 문자열이 있는 올바른 URL이 아닙니다."); } ?>
ASCII 값 > 127로 문자 제거
filter_var() 함수를 사용하여 문자열을 삭제한다.
모든 HTML 태그와 ASCII 값이 127 인 모든 문자> 문자열에서 제거된다.
<?php $str = "안녕하세요Hello WorldÆØÅ!"; $newstr = filter_var($str, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH); echo $newstr; ?>