ล่าสุดการพัฒนาเว็บบทเรียน
×

PHP เกี่ยวกับการสอน

PHP บ้าน PHP แนะนำ PHP ติดตั้ง PHP วากยสัมพันธ์ PHP ตัวแปร PHP Echo / พิมพ์ PHP ชนิดข้อมูล PHP เงื่อนไข PHP ค่าคงที่ PHP ผู้ประกอบการ PHP If...Else...Elseif PHP Switch PHP ในขณะที่ลูป PHP สำหรับลูป PHP ฟังก์ชั่น PHP แถว PHP เรียงลำดับอาร์เรย์ PHP Superglobals

PHP การจัดการ

PHP ฟอร์ม การจัดการ PHP ฟอร์ม การตรวจสอบ PHP ฟอร์ม จำเป็นต้องใช้ PHP ฟอร์ม URL/E-mail PHP ฟอร์ม สมบูรณ์

PHP สูง

PHP อาร์เรย์หลายมิติ PHP วันและเวลา PHP ประกอบด้วย PHP ไฟล์ การจัดการ PHP ไฟล์ เปิด / อ่าน PHP ไฟล์ สร้าง / เขียน PHP ไฟล์ อัปโหลด PHP Cookies PHP Sessions PHP ฟิลเตอร์ PHP Filters สูง PHP ผิดพลาด การจัดการ PHP ข้อยกเว้น

MySQL Database

MySQL ฐานข้อมูล MySQL สัมพันธ์ MySQL Create DB MySQL Create ตาราง MySQL Insert Data MySQL รับ ID เข้าครั้งสุดท้าย MySQL ใส่หลาย MySQL Prepared MySQL Select Data MySQL Delete Data MySQL Update Data MySQL Limit Data

PHP - XML

PHP XML parsers PHP SimpleXML Parser PHP SimpleXML - Get PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX แนะนำ AJAX PHP AJAX ฐานข้อมูล AJAX XML AJAX ค้นหาสด AJAX RSS Reader AJAX โพลล์

PHP Examples

PHP ตัวอย่าง PHP ทดสอบ PHP ใบรับรอง

PHP การอ้างอิง

PHP แถว PHP ปฏิทิน PHP วันที่ PHP ไดเรกทอรี PHP ผิดพลาด PHP ระบบแฟ้ม PHP กรอง PHP FTP PHP HTTP PHP Libxml PHP จดหมาย PHP คณิตศาสตร์ PHP อื่น ๆ PHP MySQLi PHP SimpleXML PHP เชือก PHP XML PHP Zip PHP ช่วงเวลา

 

PHPการตรวจสอบ 5 แบบฟอร์ม


นี้และบทถัดไปแสดงวิธีการใช้ PHP ในการตรวจสอบข้อมูลในแบบฟอร์ม


PHP ตรวจสอบแบบฟอร์ม

คิดว่าการรักษาความปลอดภัยเมื่อการประมวลผลรูปแบบ PHP!

หน้านี้จะแสดงวิธีการที่จะดำเนินการในรูปแบบ PHP กับการรักษาความปลอดภัยในใจ ตรวจสอบความถูกต้องของข้อมูลรูปแบบเป็นสิ่งสำคัญในการปกป้องแบบฟอร์มของคุณจากแฮกเกอร์และสแปมเมอร์!

รูปแบบ HTML เราจะทำงานที่ในบทเหล่านี้มีช่องใส่ต่างๆ: จำเป็นและเขตเลือกข้อความปุ่มและปุ่มส่ง:

กฎการตรวจสอบรูปแบบดังกล่าวข้างต้นมีดังนี้

สนาม กฎการตรวจสอบ
ชื่อ จำเป็นต้องใช้ + เพียงจะต้องประกอบด้วยตัวอักษรและช่องว่าง
E-mail จำเป็นต้องใช้ + ต้องมีที่อยู่อีเมลที่ถูกต้อง (with @ and .)
เว็บไซต์ ไม่จำเป็น. ถ้ามีก็ต้องมี URL ที่ถูกต้อง
คิดเห็น ไม่จำเป็น. ช่องใส่หลายสาย (textarea)
เพศ จำเป็นต้องใช้ ต้องเลือกอย่างใดอย่างหนึ่ง

ครั้งแรกที่เราจะดูที่รหัส HTML ธรรมดาสำหรับรูปแบบ:


ฟิลด์ข้อความ

ชื่อ, อีเมล์และสาขาที่เว็บไซต์เป็นองค์ประกอบการป้อนข้อความและข้อมูลการแสดงความคิดเห็นเป็น textarea รหัส 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"]);?>">

เมื่อส่งแบบฟอร์ม, แบบฟอร์มข้อมูลจะถูกส่งด้วยวิธี = "โพสต์"

ราคา $ _SERVER [ "PHP_SELF"] ตัวแปรคืออะไร?

ราคา $ _SERVER [ "PHP_SELF"] เป็นตัวแปรทั่วโลกสุดที่ส่งกลับชื่อไฟล์ของสคริปต์ในขณะนี้การดำเนินการ

ดังนั้น $ _SERVER [ "PHP_SELF"] ส่งข้อมูลแบบฟอร์มส่งไปยังหน้าของตัวเองแทนการกระโดดไปยังหน้าเว็บที่แตกต่างกัน วิธีนี้ผู้ใช้จะได้รับข้อความแสดงข้อผิดพลาดบนหน้าเช่นเดียวกับรูปแบบ

อะไรคือสิ่งที่ htmlspecialchars() ฟังก์ชั่น?

htmlspecialchars() ฟังก์ชันแปลงอักขระพิเศษไปยังหน่วยงาน HTML ซึ่งหมายความว่ามันจะเข้ามาแทนที่ตัวอักษร HTML เช่น <และ> กับ & lt; และ & gt ;. นี้จะช่วยป้องกันการโจมตีจากการใช้ประโยชน์จากรหัสโดยการฉีด HTML หรือรหัส Javascript (Cross-site Scripting attacks) ในรูปแบบ


หมายเหตุบิ๊ก PHP แบบฟอร์มการรักษาความปลอดภัย

ราคา $ _SERVER [ "PHP_SELF"] ตัวแปรสามารถนำมาใช้โดยแฮกเกอร์!

หาก PHP_SELF ใช้ในหน้าเว็บของคุณแล้วผู้ใช้สามารถใส่ทับ (/) แล้วบาง Cross Site Scripting (XSS) คำสั่งที่จะดำเนินการ

cross-site scripting (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>

รหัสนี้จะเพิ่มแท็กสคริปต์และคำสั่งแจ้งเตือน และเมื่อโหลดหน้าเว็บรหัส JavaScript จะถูกดำเนินการ (the user will see an alert box) นี่เป็นเพียงตัวอย่างง่ายๆและไม่เป็นอันตรายวิธีตัวแปร PHP_SELF สามารถใช้ประโยชน์

โปรดทราบว่าโค้ด JavaScript ใด ๆ ที่สามารถเพิ่มภายใน <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; สคริปต์ & gt; สถานที่ตั้ง href('http://www.hacked.com') & lt; / script & gt;

รหัสคือตอนนี้ปลอดภัยที่จะปรากฏบนหน้าหรือภายในอีเมล

นอกจากนี้เรายังจะทำสองสิ่งที่มากขึ้นเมื่อผู้ใช้ส่งรูปแบบ:

  1. ตัวอักษรที่ไม่จำเป็น Strip (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;
}
?>
ตัวอย่างเช่นเรียกใช้»

ขอให้สังเกตว่าในช่วงเริ่มต้นของสคริปต์ที่เราตรวจสอบว่ารูปแบบที่ได้รับการส่งโดยใช้ $ _SERVER [ "REQUEST_METHOD"] หาก REQUEST_METHOD คือโพสต์แล้วรูปแบบที่ได้รับการส่ง - และมันควรจะถูกตรวจสอบ ถ้ามันยังไม่ได้ถูกส่งข้ามการตรวจสอบและแสดงฟอร์มที่ว่างเปล่า

อย่างไรก็ตามในตัวอย่างข้างต้นช่องใส่ทั้งหมดเป็นตัวเลือก สคริปต์ที่ทำงานได้ดีแม้ว่าผู้ใช้จะไม่ป้อนข้อมูลใด ๆ

ขั้นตอนต่อไปคือการทำให้ช่องใส่ต้องและสร้างข้อความผิดพลาดในกรณีที่จำเป็น