여러분이 사용하고 계신 브라우저는 HTML5를 지원하지 않기 때문에 몇몇 요소가 제대로 보이도록 JScript를 사용하고 있습니다. 하지만 여러분의 브라우저 설정에서 스크립트 기능이 꺼져있으므로, 현재 페이지를 제대로 확인하시려면 스크립트 기능을 켜주셔야 합니다. PHP - 기초 - 필터
PHP – 기초 – 필터
2년전 작성
1년전 수정

PHP 필터

PHP 필터는 외부 입력의 유효성을 검사하고 살균하는 데 사용된다.

데이터 유효성 검사 = 데이터가 적절한 형식인지 확인한다.

데이터 삭제 = 데이터에서 불법 문자를 제거한다.

필터를 사용하는 이유

많은 웹 응용 프로그램은 외부 입력을 받는다.

외부 입력/데이터는 다음과 같다.

  • 양식의 사용자 입력
  • 쿠키
  • 웹 서비스 데이터
  • 서버 변수
  • 데이터베이스 쿼리 결과

 
항상 외부 데이터의 유효성을 검사해야 한다.
잘못 제출 된 데이터는 보안 문제로 이어지고 웹 페이지가 손상 될 수 있다.

PHP 필터를 사용하면 응용 프로그램이 올바른 입력을 얻는지 확인할 수 있다.

PHP 필터 확장

PHP 필터 확장에는 사용자 입력을 검사하는 데 필요한 많은 기능이 있으며 데이터 유효성 검사를 더 쉽고 빠르게 수행하도록 되어있다.

filter_list() 함수는 PHP 필터 확장이 제공하는 것을 나열하는 데 사용할 수 있다.

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
email 517
url 518
number_int 519
number_float 520
magic_quotes 521
callback 1024

filter_var()

filter_var() 함수는 데이터의 유효성을 검사하고 삭제한다.

filter_var() 함수는 지정된 필터로 단일 변수를 필터링한다.
필터링 하기위해서는 두 가지 데이터가 필요하다.

  • 확인하려는 변수
  • 사용할 검사 유형
문자열 검사

filter_var() 함수를 사용하여 문자열에서 모든 HTML 태그를 제거한다.

PHP
<?php
$str = "<h1>안녕하세요!</h1>";
$newstr = filter_var($str, FILTER_SANITIZE_STRING);
echo $newstr;
?>
기본 예시
안녕하세요!
정수 유효성 검사

filter_var() 함수를 사용하여 변수 $int이 정수인지 확인한다.

PHP
<?php
$int = 100;

if (!filter_var($int, FILTER_VALIDATE_INT) === false) {
echo("정수는 유효합니다.");
} else {
echo("정수는 유효하지 않습니다.");
?>
기본 예시
정수는 유효하지 않습니다.
범위 내에서 정수의 유효성 검사

filter_var() 함수를 사용하여 변수가 INT 형식과 1에서 200 사이인지 확인한다.

PHP
<?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
<?php
$ip = "127.0.0.1";

if (!filter_var($ip, FILTER_VALIDATE_IP) === false) {
echo("$ip 는 유효한 IP 주소 입니다.");
} else {
echo("$ip 는 유효한 IP 주소가 아닙니다.");
}
?>
기본 예시
127.0.0.1 는 유효한 IP 주소 입니다.
IPv6 주소 유효성 검사

filter_var() 함수를 사용하여 변수 $ip가 유효한 IPv6 주소인지 확인한다.

PHP
<?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 주소 입니다.");
}
?>
기본 예시
2001:0db8:85a3:08d3:1319:8a2e:0370:7334 은 유효한 IPv6 주소 입니다.
이메일 유효성 검사

filter_var() 함수를 사용하여 먼저 $email 변수에서 모든 잘못된 문자를 제거한 다음 유효한 전자 메일 주소인지 확인한다.

PHP
<?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 은 유효하지 않은 이메일 주소 입니다.");
}
?>
기본 예시
i@maz.kr 은 유효한 이메일 주소 입니다.
URL 유효성 검사

filter_var() 함수를 사용하여 URL에서 잘못된 문자를 모두 제거한 다음 $url가 유효한 URL인지 확인한다.

PHP
<?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이다.");
}
?>
기본 예시
https://www.maz.kr/ 은 유효한 URL이다.
URL 유효성 검사 – QueryString 포함 여부 확인

filter_var() 함수를 사용하여 변수 $url가 쿼리 문자열이 있는 URL인지 확인한다.

PHP
<?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이 아닙니다.");
}
?>
기본 예시
https://www.maz.kr 은 쿼리 문자열이 있는 올바른 URL이 아닙니다.
ASCII 값 > 127로 문자 제거

filter_var() 함수를 사용하여 문자열을 삭제한다.
모든 HTML 태그와 ASCII 값이 127 인 모든 문자> 문자열에서 제거된다.

PHP
<?php
$str = "안녕하세요Hello WorldÆØÅ!";

$newstr = filter_var($str, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
echo $newstr;
?>

기본 예시
Hello World!

참고

Mingg`s Diary
밍구
밍구
공부 목적 블로그