Latest web development tutorials
×

PHP 코스

PHP 코스 PHP 간략한 소개 PHP 설치 PHP 문법 PHP 변수 PHP echo/print PHP 데이터 유형 PHP 상수 PHP 현 PHP 운영자 PHP If...Else PHP Switch PHP 배열 PHP 배열을 정렬 PHP 자동 전역 PHP While 순환 PHP For 순환 PHP 기능 PHP 매직 변수 PHP 네임 스페이스 PHP 객체 지향

PHP 형태

PHP 형태 PHP 폼 인증 PHP 형태 - 필수 입력 사항 PHP 형태 - 확인 이메일 및 URL PHP 완전한 형태의 인스턴스 PHP $_GET 변수 PHP $_POST 변수

PHP 고급 자습서

PHP 다차원 배열 PHP 날짜 PHP 포함 PHP 파일 PHP 파일 업로드 PHP Cookie PHP Session PHP E-mail PHP 보안 E-mail PHP Error PHP Exception PHP 필터 PHP 고급 필터 PHP JSON

PHP 7 새로운 기능

PHP 7 새로운 기능

PHP 데이터베이스

PHP MySQL 간략한 소개 PHP MySQL 연결 PHP MySQL 데이터베이스 만들기 PHP MySQL 데이터 테이블 만들기 PHP MySQL 데이터를 삽입 PHP MySQL 여러 데이터를 삽입 PHP MySQL 문 준비 PHP MySQL 데이터 읽기 PHP MySQL WHERE PHP MySQL ORDER BY PHP MySQL UPDATE PHP MySQL DELETE PHP ODBC

PHP XML

XML Expat Parser XML DOM XML SimpleXML

PHP & AJAX

AJAX 간략한 소개 AJAX PHP AJAX 데이터베이스 AJAX XML AJAX 실시간 검색 AJAX RSS Reader AJAX 투표

PHP 참조 설명서

PHP Array PHP Calendar PHP cURL PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP PDO PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones PHP 이미지 처리 PHP RESTful

PHP 양식 유효성 검사

이 장에서는 클라이언트 유효성 검사가 제출 한 우리의 PHP 양식 데이터를 사용하는 방법에 대해 설명합니다.


PHP 양식 유효성 검사

주의 PHP 양식을 다루는 우리는 보안을 고려해야합니다.

우리는 해커와 스팸을 방지하기 위해, 당신은 PHP 양식 가공 데이터 보안을 보여줍니다이 장에서는 우리는 양식 데이터의 유효성을 확보 할 필요가있다.

이 절에서 설명하는 HTML 양식은 다음과 같은 입력 필드가 포함 옵션 텍스트 필드, 라디오 버튼과 함께 사용하고, 버튼을 제출해야합니다 :

코드보기 >>

다음과 같은 형태로 위의 유효성 검사 규칙은 다음과 같습니다 :

분야 유효성 검사 규칙
이름 해야합니다. + 문자와 공백을 포함
E 메일 해야합니다. + 유효한 이메일 주소이어야합니다 ( '@'를 포함하고 '.')
사이트 해야합니다. 본 경우, 유효한 URL을 포함해야
해야합니다. 멀티 - 라인 입력 필드 (텍스트 입력란)
성별 해야합니다. 당신은을 선택해야합니다

첫째, 우리는 일반 HTML 양식 코드를 살펴 보자 :


텍스트 필드

"이름", "전자 메일"및 "URL"필드가 텍스트 입력 요소이며, '메모'필드는 텍스트 영역이다. HTML 코드는 다음과 같이 :

“名字”: <input type="text" name="name">
E-mail: <input type="text" name="email">
网址: <input type="text" name="website">
备注: <textarea name="comment" rows="5" cols="40"></textarea>

라디오 버튼

"성"필드가 라디오 버튼이며, HTML 코드는 다음과 같습니다 :

性别:
<input type="radio" name="gender" value="female">女
<input type="radio" name="gender" value="male">男

양식 요소

HTML 양식 코드를 다음과 같이 :

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

데이터를 전송하려면이 양식방법 = "게시물"방법을 사용합니다.

주의 $ _SERVER [ "PHP_SELF"] 변수는 무엇입니까?

$ _SERVER는 [ "PHP_SELF"는, 슈퍼 전역 변수 인 문서 루트와 관련된 현재 실행중인 스크립트 파일 이름을 반환합니다.

그래서, $ _SERVER [ "PHP_SELF은"] 대신 다른 페이지로 점프의 현재 페이지로 양식 데이터를 전송합니다.

주의 반드시 htmlspecialchars () 메소드는 무엇입니까?

HTML 개체에 몇 가지 미리 정의 된 문자를 반드시 htmlspecialchars () 함수.

미리 정의 된 문자는 다음과 같습니다

  • & (앰퍼샌드)이된다 & A;
  • "(큰 따옴표)가된다 & quot;
  • '(1 인용)하게 & # 039;
  • <(미만)가된다 & LT;
  • > (보다 큼)을하게된다


PHP 양식이 어디에 관심을 일으킬 필요가?

$ _SERVER는 [ "PHP_SELF"] 변수는 해커에 의해 사용될 수있다!

크로스 사이트 스크립팅 HTTP 링크를 사용하여 해커가 공격 할 때, $는 _ SERVER [ "PHP_SELF"] 변수는 서버 스크립트에 이식한다. 그 이유는 크로스 사이트 스크립팅 실행 파일 뒤에 경로에 부착되기 때문에, $ _SERVER [ "PHP_SELF"] 문자열이 자바 스크립트 코드 뒤에 HTTP 링크를 포함하는 것입니다.

주의 XSS는 CSS (크로스 사이트 스크립트), 크로스 사이트 스크립팅 공격으로 알려져 있습니다. 사용자가 페이지를 탐색 할 때 악의적 인 공격자가, HTML 코드에 악의적 인 웹 페이지를 삽입, HTML 코드 안에 내장 웹은 악의적 인 사용자의 특정 목적을 달성하기 위해 실행됩니다.

"test_form.php"라는 다음과 같은 형식의 파일을 지정합니다 :

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

다음과 같이 수정 위의 코드와 같이 이제, 우리는, 지정된 주소 "test_form.php"를 제출하도록 URL을 사용합니다 :

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

너무 좋아하고.

그러나 계정에 사용자를 복용 브라우저의 주소 표시 줄에 다음 주소를 입력합니다 :

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

위의 URL은 다음 코드로 해석하고 실행한다 :

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

스크립트 태그 코드를 추가하고 경고 명령을 추가합니다. 페이지가로드가 자바 스크립트 코드를 실행하면 (사용자는 팝업이 표시됩니다). 이 PHP_SELF 변수가 해커에 의해 사용됩니다 설명하기 위해 단순한 예입니다.

자바 스크립트 코드는 <script> 태그에 추가 할 수 있습니다! 해커는 다른 페이지, 악성 코드를 보호하기위한 페이지 코드 파일의 서버로 리디렉션이 페이지를 사용하여, 코드는 사용자의 전역 변수 또는 폼 데이터를 얻기 위해 변경 될 수있다.


어떻게 $ _SERVER [ "PHP_SELF"] 악용을 피하기 위해?

$ _SERVER 반드시 htmlspecialchars에 의해 [ "PHP_SELF은"] () 함수는 악용 방지 할 수 있습니다.

다음 코드를 형성한다 :

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

HTML 개체에 몇 가지 미리 정의 된 문자를 반드시 htmlspecialchars (). 사용자 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.w3big.com')</script>

다음은 HTML 이스케이프 코드로 저장되기 때문에 코드가 실행되지 않습니다 :

&lt;script&gt;location.href('http://www.w3big.com')&lt;/script&gt;

상기 코드는 안전하고 표시하거나 페이지에 메시지를 삽입 할 수있다.

사용자가 양식을 제출하면, 우리는 다음과 같은 두 가지 작업을 수행합니다 :

  1. 사용 PHP는 사용자가 입력 한 데이터 (: 공백, 탭, 줄 바꿈 등) 불필요한 문자를 제거 () 함수를 트림.
  2. (\)은 사용자 입력 데이터 슬래시를 제거하기 위해서 stripslashes PHP의 () 함수를 사용하여

우리의 정의의 함수로 작성된 이러한 필터링 기능이 크게 코드의 재사용 성을 향상시킬 수 있도록.

함수 이름 test_input ().

이제 다음과 같이, 우리는 $ _POST 내의 모든 변수를 검출하는 () 함수를 test_input 수 스크립트 코드 :

<?php
// 定义变量并默认设置为空值
$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 인 경우, 양식 제출됩니다. 형태는 확인을 건너 뜁니다 제출하고 빈 표시되지 않습니다.

상기 예에서 입력 된 항목을 이용하여 데이터를 입력하지 않는 사용자가 적절하게 표시 할 수있는 경우에도, 선택적이다.

다음 섹션에서 우리는 사용자가 입력 한 데이터의 유효성을 검사하는 방법에 대해 설명합니다.