본문 바로가기
Language/php

FILTER ! : 외부에서 온 데이터는 검증해야 한다.

by 잘먹는 개발자 에단 2025. 1. 31.

1. PHP 필터 확장 Filter Extension

 

필터 확장은 외부 입력을 검증하고 불필요한 데이터를 제거하는 함수들을 포함하고 있다.

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>
            <th>Filter Name</th>
            <th>Filter ID</th>
        </tr>
        <?php
        foreach (filter_list() as $id => $filter) {
            echo "<tr><td>$filter</td><td>" . filter_id($filter) . "</td></tr>";
        }
        ?>
    </table>
</body>
</html>

 

 

 

2. PHP에서 필터 확장을 사용해야 하는 이유

 

웹 어플리케이션에서는 다양한 외부 입력을 받게 된다. 

 

예를 들어

- 사용자 입력 (폼데이터)

- 쿠키데이터

- 웹서비스 데이터 (api응답)

- 서버 변수 ($_SERVER, $REQUEST)

- 데이터베이스 쿼리 결과

 

이러한 데이터를 필터링하지 않으면 보안 취약점 (SQL삽입공격, 크로스사이트스크립팅 공격, 악성입력 등)이 발생할 수 있다. 

 

 

3. filter_var() 함수 사용법

PHP의 filter_var() 함수는 데이터를 검증하고 정화하는데 사용되는 가장 강력한 함수이다.

filter_var(값, 필터_타입);

첫번째 인자로 필터링할 값, 두번째 인자로 사용할 필터 타입이 들어간다.

 

 

4. 문자열 정화

 

FILTER_SANITIZE_STRING : html 태그를 제거하여 보안을 강화한다. -> html 인젝션을 방지한다. 

<?php
$str = "<h1>Hello World!</h1>";
$clean_str = filter_var($str, FILTER_SANITIZE_SPECIAL_CHARS);
echo $clean_str;
?>

 

 

5. 숫자검증

 

FILTER_VALIDATE_INT : 변수가 정수인지 확인한다.

<?php
$int = "100";
if (filter_var($int, FILTER_VALIDATE_INT) !== false) {
    echo "정수 값입니다.";
} else {
    echo "정수 값이 아닙니다.";
}
?>

 

 

6. 이메일 검증

FILTER_VALIDATE_EMAIL : 이메일이 올바른 형식인지 확인한다.

<?php
$email = "test@example.com";
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo "올바른 이메일 형식입니다.";
} else {
    echo "잘못된 이메일 형식입니다.";
}
?>

 

 

 

'Language > php' 카테고리의 다른 글

디자인 패턴  (0) 2025.02.04
PRG 패턴  (0) 2025.01.31
SQL 인젝션 방지, htmlspecialchars(), isset()  (0) 2025.01.31
php 개발 시 참고사항 (3) - 연관배열  (0) 2025.01.31
php 개발 시 참고사항 (2)  (1) 2025.01.31