🟣 PHP

วิธีรับค่าจาก HTML Form ด้วย PHP (GET และ POST) พร้อมวิธีป้องกัน XSS สำหรับมือใหม่

6 นาที 20 views บันทึกเป็น PDF
วิธีรับค่าจาก HTML Form ด้วย PHP (GET และ POST) พร้อมวิธีป้องกัน XSS สำหรับมือใหม่

เรียนรู้วิธีรับข้อมูลจาก HTML Form ด้วย PHP ผ่าน $_GET และ $_POST พร้อมเทคนิคการป้องกันช่องโหว่ XSS ด้วย htmlspecialchars เพื่อสร้างเว็บที่ปลอดภัย

ทำความรู้จักกับ HTML Form และการส่งข้อมูลในโลกของ PHP

การรับข้อมูลจากผู้ใช้งานเปรียบเสมือนการเปิดช่องทางสื่อสารระหว่างเว็บไซต์กับผู้เข้าชมครับ ลองจินตนาการว่าเว็บไซต์ของคุณคือร้านค้า การมี HTML Form (แบบฟอร์มบนหน้าเว็บ) ก็เหมือนกับการยื่นใบสั่งซื้อให้ลูกค้ากรอกข้อมูล ซึ่งในโลกของการเขียนโปรแกรม เราต้องมีตัวรับข้อมูลนั้นไปประมวลผลต่อ โดยภาษาที่นิยมใช้จัดการงานนี้คือ PHP (ภาษาโปรแกรมฝั่ง Server ที่ทำหน้าที่ประมวลผลข้อมูล) ครับ

หัวใจสำคัญของการรับข้อมูลคือการส่งค่าผ่าน HTTP Request (คำขอจากเบราว์เซอร์ไปยังเซิร์ฟเวอร์) ซึ่ง PHP จะเตรียมตัวแปรพิเศษที่เรียกว่า Superglobals (ตัวแปรที่เข้าถึงได้ทุกที่ในโค้ด) มาให้เราใช้งานผ่าน $_GET และ $_POST การเข้าใจว่าเมื่อไหร่ควรใช้ตัวไหน คือก้าวแรกที่สำคัญมากของโปรแกรมเมอร์มืออาชีพ เพราะมันส่งผลโดยตรงต่อทั้งความปลอดภัยและความถูกต้องของข้อมูลครับ

ความแตกต่างของ $_GET และ $_POST ที่โปรแกรมเมอร์ต้องรู้

$_GET คือการส่งข้อมูลที่แนบไปกับ URL (ที่อยู่ของเว็บไซต์) คุณจะสังเกตเห็นได้ง่ายๆ หากมีการส่งค่าผ่านวิธีนี้ เช่น example.com/search.php?keyword=php ซึ่งการส่งแบบนี้เหมาะสำหรับการทำระบบค้นหาหรือการแบ่งหน้าเว็บ เพราะผู้ใช้สามารถคัดลอกลิงก์ไปแชร์ต่อได้ แต่ข้อควรระวังคือ ห้ามใช้ส่งข้อมูลสำคัญ เช่น รหัสผ่าน เพราะข้อมูลจะโชว์หราอยู่บนแถบที่อยู่ของเบราว์เซอร์ครับ

ในทางกลับกัน $_POST จะเป็นการส่งข้อมูลแบบ "ซ่อน" ไว้ในเนื้อหาของคำขอ (Request Body) ข้อมูลจะไม่ปรากฏบน URL ทำให้มีความปลอดภัยมากกว่าและรองรับปริมาณข้อมูลได้มากกว่า $_GET เราจึงนิยมใช้ $_POST สำหรับการสมัครสมาชิก การล็อกอิน หรือการกรอกข้อมูลส่วนตัว เพื่อป้องกันไม่ให้ข้อมูลสำคัญหลุดรอดไปกับประวัติการเข้าชมหรือลิงก์ที่แชร์ครับ

<!-- ตัวอย่าง HTML Form -->
<form action="process.php" method="POST">
    <label>ชื่อของคุณ:</label>
    <input type="text" name="username">
    <button type="submit">ส่งข้อมูล</button>
</form>

จากโค้ดด้านบน เรากำหนด method="POST" เพื่อบอกว่าให้ส่งข้อมูลผ่านช่องทางที่ปลอดภัย ส่วน name="username" คือชื่อของช่องข้อมูลที่ PHP จะนำไปใช้เรียกค่าออกมาครับ เมื่อกดปุ่ม Submit ข้อมูลจะถูกส่งไปยังไฟล์ process.php ทันที

การรับค่าใน PHP และการป้องกันภัยเงียบด้วย htmlspecialchars()

เมื่อข้อมูลเดินทางมาถึงฝั่ง PHP แล้ว เราจะใช้ตัวแปร $_POST['username'] เพื่อดึงค่าที่ผู้ใช้กรอกมาใช้งาน แต่เดี๋ยวก่อนครับ! การนำข้อมูลดิบจากผู้ใช้ไปแสดงผลหรือบันทึกลงฐานข้อมูลทันทีนั้นอันตรายมาก เพราะอาจเกิดช่องโหว่ที่เรียกว่า XSS (Cross-Site Scripting) ซึ่งเป็นการที่แฮกเกอร์ฝังคำสั่งอันตรายผ่านช่องกรอกข้อมูล เพื่อขโมยข้อมูลหรือทำลายเว็บไซต์ครับ

วิธีป้องกันที่ง่ายและได้ผลดีที่สุดคือการใช้ฟังก์ชัน htmlspecialchars() (ฟังก์ชันเปลี่ยนอักขระพิเศษเป็นรหัส HTML) เพื่อแปลงสัญลักษณ์อันตรายอย่าง < หรือ > ให้กลายเป็นข้อความธรรมดาที่เบราว์เซอร์ไม่นำไปตีความเป็นโค้ด การทำแบบนี้คือ Best Practice (แนวปฏิบัติที่ดีที่สุด) ที่โปรแกรมเมอร์ทุกคนต้องติดเป็นนิสัยเพื่อความปลอดภัยของระบบครับ

<?php
// รับค่าจากฟอร์ม
$name = $_POST['username'];

// ป้องกัน XSS ด้วยการแปลงอักขระพิเศษ
$safe_name = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');

echo "สวัสดีคุณ: " . $safe_name;
?>

ในตัวอย่างนี้ เรานำค่าที่รับมาผ่าน htmlspecialchars() ก่อนนำไปแสดงผลเสมอ หากผู้ใช้แกล้งกรอกโค้ดอันตรายเข้ามา ระบบของเราก็จะไม่รันโค้ดนั้น แต่จะแสดงผลเป็นข้อความตัวอักษรธรรมดาแทน ซึ่งนี่คือเกราะป้องกันชั้นดีที่ช่วยให้คุณนอนหลับสบายขึ้นในฐานะนักพัฒนาครับ

สรุป: การนำไปใช้จริงและการเป็นโปรแกรมเมอร์ที่ใส่ใจความปลอดภัย

การเข้าใจเรื่อง $_GET และ $_POST ไม่ใช่แค่เรื่องของการเขียนโค้ดให้รันได้ แต่มันคือการเข้าใจ Architecture (โครงสร้างการทำงาน) ของเว็บแอปพลิเคชัน ในฐานะที่คุณกำลังก้าวสู่เส้นทางโปรแกรมเมอร์ ผมแนะนำว่าให้ลองสร้างโปรเจกต์เล็กๆ เช่น "ระบบสมุดเยี่ยมชม" (Guestbook) ที่รับชื่อและข้อความจากผู้ใช้ แล้วลองหัดใช้ทั้งสองวิธีเพื่อเปรียบเทียบผลลัพธ์ครับ

สิ่งที่ผมอยากฝากไว้คือ อย่าไว้ใจข้อมูลจากผู้ใช้เด็ดขาด ไม่ว่าจะเป็นฟอร์มหน้าเว็บ หรือค่าที่ส่งผ่าน URL ต้องมีการตรวจสอบและทำความสะอาดข้อมูล (Data Sanitization) เสมอ การฝึกฝนเรื่องความปลอดภัยตั้งแต่วันแรกจะช่วยสร้าง Mindset (กระบวนการคิด) ที่ดีให้กับคุณ และทำให้คุณกลายเป็นโปรแกรมเมอร์ที่บริษัทต่างๆ อยากร่วมงานด้วยอย่างแน่นอนครับ

  1. ทดลองสร้าง Form ด้วย method="POST" และรับค่าด้วย $_POST
  2. ลองกรอกข้อมูลที่เป็น HTML เช่น <script>alert('Hacked!');</script> แล้วสังเกตผลลัพธ์ก่อนและหลังใช้ htmlspecialchars()
  3. นำความรู้นี้ไปประยุกต์ใช้ในโปรเจกต์ Portfolio ของคุณ เพื่อสร้างระบบที่ปลอดภัยและเป็นมืออาชีพ

แชร์บทความ

Facebook X LINE

บทความที่เกี่ยวข้อง

สร้างระบบ Authentication ด้วย PHP 8: สอนทำระบบ Login และ Hash รหัสผ่านให้ปลอดภัย
PHP

สร้างระบบ Authentication ด้วย PHP 8: สอนทำระบบ Login และ Hash รหัสผ่านให้ปลอดภัย

เรียนรู้วิธีสร้างระบบ Authentication ด้วย PHP 8 ตั้งแต่การสมัครสมาชิก การ Hash รหัสผ่านด้วย password_hash ไปจนถึงการทำระบบ Login และ Protected Dashboard

1 month ago 7 นาที
22 views
สอน PHP 8 จัดการฐานข้อมูล CRUD: วิธี UPDATE และ DELETE ข้อมูลอย่างปลอดภัยด้วย Bind Parameters
PHP

สอน PHP 8 จัดการฐานข้อมูล CRUD: วิธี UPDATE และ DELETE ข้อมูลอย่างปลอดภัยด้วย Bind Parameters

เรียนรู้วิธีแก้ไขและลบข้อมูลในฐานข้อมูลด้วย PHP 8 และ PDO พร้อมเทคนิคการใช้ Bind Parameters เพื่อป้องกัน SQL Injection สำหรับมือใหม่หัดเขียนเว็บ

1 month ago 6 นาที
21 views
สอนเขียน PHP 8 เชื่อมต่อฐานข้อมูลด้วย PDO ทำ CRUD อย่างปลอดภัย ป้องกัน SQL Injection
PHP

สอนเขียน PHP 8 เชื่อมต่อฐานข้อมูลด้วย PDO ทำ CRUD อย่างปลอดภัย ป้องกัน SQL Injection

เรียนรู้วิธีจัดการฐานข้อมูลด้วย PHP 8 ผ่าน PDO อย่างมืออาชีพ พร้อมเทคนิคการใช้ Prepared Statements เพื่อป้องกัน SQL Injection สำหรับมือใหม่หัดเขียนเว็บ

1 month ago 7 นาที
22 views