PHP 튜토리얼

PHP 홈 PHP 소개 PHP 설치 PHP 구문 PHP 주석 PHP 변수 PHP 에코 / 인쇄 PHP 데이터 유형 PHP 문자열 PHP 숫자 PHP 수학 PHP 상수 PHP 연산자 PHP If...Else...Elseif PHP 스위치 PHP 루프 PHP 함수 PHP 배열 PHP 슈퍼글로벌 PHP 정규식

PHP 양식

PHP 양식 처리 PHP 양식 유효성 검사 PHP 양식 필요 PHP 양식 URL/이메일 PHP 양식 완성

PHP 고급

PHP 날짜 및 시간 PHP 포함 PHP 파일 처리 PHP 파일 열기/읽기 PHP 파일 생성/쓰기 PHP 파일 업로드 PHP 쿠키 PHP 세션 PHP 필터 PHP 필터 고급 PHP 콜백 함수 PHP JSON PHP 예외

PHP OOP

PHP OOP란? PHP 클래스/객체 PHP 생성자 PHP 소멸자 PHP 액세스 수정자 PHP 상속 PHP 상수 PHP 추상 클래스 PHP 인터페이스 PHP 특성 PHP 정적 메서드 PHP 정적 속성 PHP 네임스페이스 PHP 반복 가능

MySQL 데이터베이스

MySQL 데이터베이스 MySQL 연결 MySQL 생성 DB MySQL 테이블 생성 MySQL 삽입 데이터 MySQL 마지막 ID 가져오기 MySQL은 다중 삽입 MySQL 준비 MySQL 선택 데이터 MySQL 어디 MySQL 주문 기준 MySQL 데이터 삭제 MySQL 업데이트 데이터 MySQL 제한 데이터

PHP XML

PHP XML 파서 PHP SimpleXML 파서 PHP SimpleXML - 가져오기 PHP XML 국외 거주자 PHP XML DOM

PHP - AJAX

AJAX 소개 AJAX PHP AJAX 데이터베이스 AJAX XML AJAX 라이브 검색 AJAX 투표

PHP 예제

PHP 예제 PHP 컴파일러 PHP 퀴즈 PHP 연습 PHP 인증서

PHP 참조

PHP 개요 PHP 배열 PHP 캘린더 PHP 날짜 PHP 디렉토리 PHP 오류 PHP 예외 PHP 파일 시스템 PHP 필터 PHP FTP PHP JSON PHP 키워드 PHP 라이브러리 XML PHP 메일 PHP 수학 PHP 기타 PHP MySQLi PHP 네트워크 PHP 출력 제어 PHP 정규식 PHP SimpleXML PHP 스트림 PHP 문자열 PHP 변수 처리 PHP XML 파서 PHP 우편번호 PHP 시간대

PHP 양식 유효성 검사


이 장과 다음 장에서는 PHP를 사용하여 양식 데이터의 유효성을 검사하는 방법을 보여줍니다.


PHP 양식 유효성 검사

PHP 양식을 처리할 때 SECURITY를 생각하십시오!

이 페이지에서는 보안을 염두에 두고 PHP 양식을 처리하는 방법을 보여줍니다. 양식 데이터의 적절한 유효성 검사는 해커와 스팸 발송자로부터 양식을 보호하는 데 중요합니다!

이 장에서 작업할 HTML 양식에는 필수 및 선택적 텍스트 필드, 라디오 버튼 및 제출 버튼과 같은 다양한 입력 필드가 포함되어 있습니다.

위 양식에 대한 유효성 검사 규칙은 다음과 같습니다.

Field Validation Rules
Name Required. + Must only contain letters and whitespace
E-mail Required. + Must contain a valid email address (with @ and .)
Website Optional. If present, it must contain a valid URL
Comment Optional. Multi-line input field (textarea)
Gender Required. Must select one

먼저 양식에 대한 일반 HTML 코드를 살펴보겠습니다.



텍스트 필드

이름, 이메일 및 웹 사이트 필드는 텍스트 입력 요소이고 주석 필드는 텍스트 영역입니다. HTML 코드는 다음과 같습니다.

Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website: <input type="text" name="website">
Comment: <textarea name="comment" rows="5" cols="40"></textarea>

라디오 버튼

성별 필드는 라디오 버튼이며 HTML 코드는 다음과 같습니다.

Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<input type="radio" name="gender" value="other">Other

양식 요소

양식의 HTML 코드는 다음과 같습니다.

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

양식이 제출되면 양식 데이터가 method="post"와 함께 전송됩니다.

$_SERVER["PHP_SELF"] 변수란 무엇입니까?

$_SERVER["PHP_SELF"]는 현재 실행 중인 스크립트의 파일 이름을 반환하는 슈퍼 전역 변수입니다.

따라서 $_SERVER["PHP_SELF"]는 제출된 양식 데이터를 다른 페이지로 건너뛰는 대신 페이지 자체로 보냅니다. 이런 식으로 사용자는 양식과 동일한 페이지에서 오류 메시지를 받게 됩니다.

htmlspecialchars() 함수는 무엇입니까?

htmlspecialchars() 함수는 특수 문자를 HTML 엔터티로 변환합니다. 이는 < 및 >와 같은 HTML 문자를 < 및 >. 이는 공격자가 양식에 HTML 또는 Javascript 코드(교차 사이트 스크립팅 공격)를 삽입하여 코드를 악용하는 것을 방지합니다.


PHP 양식 보안에 대한 큰 참고 사항

$_SERVER["PHP_SELF"] 변수는 해커가 사용할 수 있습니다!

페이지에서 PHP_SELF를 사용하는 경우 사용자는 슬래시(/)를 입력한 다음 일부 XSS(교차 사이트 스크립팅) 명령을 입력하여 실행할 수 있습니다.

XSS(교차 사이트 스크립팅)는 일반적으로 웹 응용 프로그램에서 발견되는 일종의 컴퓨터 보안 취약점입니다. XSS를 사용하면 공격자가 다른 사용자가 보는 웹 페이지에 클라이언트측 스크립트를 삽입할 수 있습니다.

"test_form.php"라는 페이지에 다음 형식이 있다고 가정합니다.

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

이제 사용자가 주소 표시줄에 "http://www.example.com/test_form.php"와 같은 일반 URL을 입력하면 위 코드가 다음과 같이 번역됩니다.

<form method="post" action="test_form.php">

여태까지는 그런대로 잘됐다.

그러나 사용자가 주소 표시줄에 다음 URL을 입력한다고 가정합니다.

http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

이 경우 위의 코드는 다음과 같이 번역됩니다.

<form method="post" action="test_form.php/"><script>alert('hacked')</script>

이 코드는 스크립트 태그와 경고 명령을 추가합니다. 페이지가 로드되면 JavaScript 코드가 실행됩니다(사용자에게 경고 상자가 표시됨). 이것은 PHP_SELF 변수가 어떻게 악용될 수 있는지 간단하고 무해한 예입니다.

<script> 태그 안에 모든 JavaScript 코드를 추가할 수 있다는 점에 유의 하십시오! 해커는 사용자를 다른 서버의 파일로 리디렉션할 수 있으며 해당 파일에는 전역 변수를 변경하거나 사용자 데이터를 저장하기 위해 양식을 다른 주소로 제출할 수 있는 악성 코드가 포함될 수 있습니다.


$_SERVER["PHP_SELF"] 악용을 피하는 방법?

$_SERVER["PHP_SELF"] 익스플로잇은 htmlspecialchars() 함수를 사용하여 피할 수 있습니다.

양식 코드는 다음과 같아야 합니다.

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

htmlspecialchars() 함수는 특수 문자를 HTML 엔터티로 변환합니다. 이제 사용자가 PHP_SELF 변수를 악용하려고 하면 다음과 같은 결과가 출력됩니다.

<form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">

악용 시도가 실패하고 아무런 피해가 없습니다!


PHP로 양식 데이터 유효성 검사

우리가 할 첫 번째 일은 PHP의 htmlspecialchars() 함수를 통해 모든 변수를 전달하는 것입니다.

htmlspecialchars() 함수를 사용할 때; 사용자가 텍스트 필드에 다음을 제출하려고 하면:

<script>location.href('http://www.hacked.com')</script>

- 다음과 같이 HTML 이스케이프 코드로 저장되므로 실행되지 않습니다.

<script>location.href('http://www.hacked.com')</script>

이제 코드를 페이지나 이메일 내부에 안전하게 표시할 수 있습니다.

또한 사용자가 양식을 제출할 때 두 가지 작업을 더 수행합니다.

  1. 사용자 입력 데이터에서 불필요한 문자(여분의 공백, 탭, 줄 바꿈) 제거(PHP trim() 함수 사용)
  2. 사용자 입력 데이터에서 백슬래시(\) 제거(PHP stripslashes() 함수 사용)

다음 단계는 우리를 위해 모든 검사를 수행할 함수를 만드는 것입니다(같은 코드를 반복해서 작성하는 것보다 훨씬 편리합니다).

함수 이름을 test_input()으로 지정하겠습니다.

이제 test_input() 함수를 사용하여 각 $_POST 변수를 확인할 수 있으며 스크립트는 다음과 같습니다.

예시

<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = test_input($_POST["name"]);
  $email = test_input($_POST["email"]);
  $website = test_input($_POST["website"]);
  $comment = test_input($_POST["comment"]);
  $gender = test_input($_POST["gender"]);
}

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

스크립트 시작 시 $_SERVER["REQUEST_METHOD"]를 사용하여 양식이 제출되었는지 확인합니다. REQUEST_METHOD가 POST이면 양식이 제출된 것이며 유효성을 검사해야 합니다. 제출하지 않은 경우 유효성 검사를 건너뛰고 빈 양식을 표시합니다.

그러나 위의 예에서 모든 입력 필드는 선택 사항입니다. 사용자가 데이터를 입력하지 않아도 스크립트는 잘 작동합니다.

다음 단계는 입력 필드를 필수로 만들고 필요한 경우 오류 메시지를 생성하는 것입니다.