최신 웹 개발 튜토리얼
 

PHP 5 양식 유효성 검사


이것과 다음 장에서는 폼 데이터를 검증하기 위해 PHP를 사용하는 방법을 보여줍니다.


PHP 폼 검증

PHP 양식을 처리 할 때 보안을 생각!

이 페이지는 보안을 염두에두고 PHP 양식을 처리하는 방법을 보여줍니다. 폼 데이터의 적절한 검증은 해커와 스패머에서 양식을 보호하는 것이 중요!

필수 및 선택 텍스트 필드, 라디오 버튼 및 제출 버튼 : 우리는이 장에서에서 일하게 될 것입니다 HTML 양식, 다양한 입력 필드를 포함합니다 :

다음과 같이 양식에 대한 유효성 검사 규칙 위입니다 :

유효성 검사 규칙
이름 필요합니다. + 문자와 공백을 포함해야
이메일 필요합니다. + 유효한 이메일 주소를 포함해야합니다 (with @ and .)
웹 사이트 선택 과목. 존재하는 경우, 유효한 URL을 포함해야
논평 선택 과목. 멀티 - 라인 입력 필드 (textarea)
성별 필요합니다. 하나를 선택해야합니다

먼저 우리는 폼의 일반 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

폼 요소

형태의 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 문자를 대체 할 것을 의미 같은 <와>와 & LT; 하고있다 ;. 이 HTML이나 자바 스크립트 코드를 주입하여 코드를 악용하는 공격자를 방지 (Cross-site Scripting attacks) 형태로.


PHP 양식 보안에 큰 참고

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

PHP_SELF이 페이지에서 사용하는 경우, 사용자는 슬래시 입력 할 수 있습니다 (/) 다음 몇 가지 크로스 사이트 스크립팅 (XSS) 실행 명령을.

크로스 사이트 스크립팅 (XSS) 일반적으로 웹 애플리케이션에서 발견되는 컴퓨터 보안 취약점의 유형입니다. XSS는 다른 사용자가 볼 웹 페이지에 클라이언트 사이드 스크립트를 삽입하는 공격자를 할 수 있습니다.

우리라는 이름의 페이지에 다음과 같은 형식 있다고 가정 "test_form.php" :

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

사용자가 같은 주소 표시 줄에 정상적인 URL 입력하면 이제 "http://www.example.com/test_form.php" , 위의 코드로 변환 될 것입니다 :

<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>

이 코드는 스크립트 태그 및 경고 명령을 추가합니다. 페이지가로드가 자바 스크립트 코드가 실행됩니다 때 (the user will see an alert box) . 이것은 PHP_SELF 변수가 악용 될 수있는 방법을 단순한 무해한 예입니다.

어떤 자바 스크립트 코드는 내부에 추가 할 수 있습니다 알고 있어야합니다 <script> 태그! 해커는 다른 서버에있는 파일로 사용자를 리디렉션 할 수 있으며, 해당 파일은 전역 변수를 변경하거나 예를 들어, 사용자 데이터를 저장하기 위해 다른 주소로 양식을 제출할 수있는 악성 코드를 보유 할 수 있습니다.


어떻게 $ _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> 위치. href('http://www.hacked.com') </ script>

- HTML은 다음과 같이 코드를 탈출로 저장 될 수 있기 때문에이 실행되지 않을 것이다 :

및 LT; 스크립트한다 위치. href('http://www.hacked.com') 및 / 스크립트한다

코드는 현재 페이지 또는 전자 우편 안에 표시하는 것이 안전합니다.

사용자가 양식을 제출하면 우리는 또한 두 가지 이상의 일을 할 것입니다 :

  1. 스트립 불필요한 문자 (extra space, tab, newline) 사용자가 입력 한 데이터 행 (with the PHP trim() 작용)
  2. 제거 백 슬래시 (\) 은 사용자 입력 데이터를 발 (with the PHP stripslashes() 함수)

다음 단계는 우리를 위해 모든 검사를 수행하는 함수 만드는 것입니다 (which is much more convenient than writing the same code over and over again) .

우리는 함수 이름을 것 test_input() .

이제, 우리는 각각 $ _POST 변수를 확인하실 수 있습니다 test_input() 기능, 스크립트는 다음과 같습니다 :

<?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;
}
?>
»실행 예

스크립트의 시작이 주목, 우리는 양식 [ 'REQUEST_METHOD을 "] $ _SERVER를 사용하여 제출되었는지 여부를 확인합니다. REQUEST_METHOD가 POST 인 경우, 다음 폼이 제출되었습니다 - 그리고 그것을 확인해야합니다. 가 제출되지 않은 경우, 유효성 검사를 생략하고 빈 양식을 표시합니다.

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

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