AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

PHP에서의 입력 필터링 마스터하기: `filter_input` 기법

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

  • PHP 개발자 (초보자 및 중급자)
  • 보안 및 입력 검증에 관심 있는 개발자
  • 웹 애플리케이션 개발을 진행 중인 프로젝트 팀
  • 난이도: 중간 (기본 문법 이해 필요, 보안 개념 기본 지식 권장)

핵심 요약

  • filter_input 함수$_GET, $_POST, $_COOKIE 등의 외부 변수를 필터링 및 검증하는 데 사용되며, SQL 인젝션, XSS 등의 보안 취약점을 방지.
  • 필수 파라미터:
  • $type (예: INPUT_POST), $variable_name, $filter (예: FILTER_VALIDATE_EMAIL), $options (예: min_range, max_range).
  • 주의 사항: FILTER_SANITIZE_STRINGPHP 8.1에서 비활성화되어 htmlspecialchars 등의 대체 방법 사용 권장.

섹션별 세부 요약

1. `filter_input` 기본 개념 및 사용법

  • filter_input은 외부 입력값을 자동으로 검증하고 청소하는 PHP 내장 함수.
  • 예: filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL)로 이메일 형식 검증.
  • 필터 종류: FILTER_VALIDATE_EMAIL, FILTER_VALIDATE_INT, FILTER_VALIDATE_URL 등.

2. 입력값 청소 및 검증 예시

  • 이메일 검증:

```php

$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);

if ($email === false) { echo "Invalid email!"; }

```

  • 문자열 청소:

```php

$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);

```

  • 숫자 검증:

```php

$age = filter_input(INPUT_GET, 'age', FILTER_VALIDATE_INT);

if ($age === false || $age < 1) { echo "Invalid age!"; }

```

3. 범위 제한 및 배열 입력 처리

  • 범위 제한:

```php

$score = filter_input(INPUT_POST, 'score', FILTER_VALIDATE_INT, ["options" => ["min_range" => 0, "max_range" => 100]]);

```

  • 배열 입력 처리:

```php

$filters = [

'emails' => ['filter' => FILTER_VALIDATE_EMAIL, 'flags' => FILTER_REQUIRE_ARRAY]

];

$sanitized = filter_input_array(INPUT_POST, $filters);

```

4. `filter_input`의 장단점

  • 장점:
  • 내장 함수이므로 직접 검증 로직 작성 필요 없음.
  • 보안 취약점 방지에 효율적.
  • 단점:
  • FILTER_SANITIZE_STRING일부 필터가 비활성화됨.
  • 고도화된 검증은 커스텀 라이브러리(예: Laravel Validator) 사용 권장.

5. 고급 검증을 위한 대체 라이브러리

  • Laravel Validator 또는 Symfony Validator Component 사용 시:
  • 복잡한 규칙 정의 가능.
  • 보안 및 유효성 검증의 유연성 확보.

결론

  • filter_input은 간단한 입력 검증 및 청소에 적합하지만, 복잡한 검증은 Laravel Validator 등 라이브러리 사용 권장.
  • PHP 8.1 이상에서는 FILTER_SANITIZE_STRING 대신 htmlspecialchars 또는 filter_varFILTER_SANITIZE_FULL_SPECIAL_CHARS 사용.
  • 보안 중심 개발을 위해 필터링 로직은 모든 사용자 입력에 적용해야 함.