Superglobals คือตัวแปรในตัว (built-in) ของ PHP ที่ พร้อมใช้งานอัตโนมัติในทุกขอบเขต (scope) โดยเก็บข้อมูล request, ข้อมูลเซิร์ฟเวอร์, session และอื่น ๆ เป็นช่องทางที่สคริปต์ PHP ใช้เข้าถึงข้อมูล HTTP request ที่เข้ามา
Superglobals หลัก ๆ
ตัวแปรเหล่านี้พร้อมใช้งานทุกที่ (ไม่ต้องใช้คีย์เวิร์ด global) ต่างจากตัวแปรปกติที่มีขอบเขตจำกัดอยู่ในฟังก์ชันของมัน
// query parameters and form data
$id = $_GET['id'] ?? null; // ?? provides a default if missing
$username = $_POST['username'] ?? '';
// request info
$method = $_SERVER['REQUEST_METHOD']; // "GET", "POST"
$uri = $_SERVER['REQUEST_URI'];
$ip = $_SERVER['REMOTE_ADDR'];
// ❌ DANGEROUS — using raw input directly enables attacks
$query = "SELECT * FROM users WHERE id = " . $_GET['id']; // SQL INJECTION!
echo $_GET['name']; // XSS!
// ✅ ALWAYS validate, sanitize, and escape user input
$id = (int) $_GET['id']; // cast/validate
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); // parameterized query
echo htmlspecialchars($_GET['name']); // escape for output (prevent XSS)
ข้อมูลจาก $_GET, $_POST, $_COOKIE, $_REQUEST คือ input จากผู้ใช้ที่ไม่น่าเชื่อถือ การใช้มันโดยตรงเปิดช่องให้เกิด SQL injection, XSS และการโจมตีอื่น ๆ ดังนั้นต้อง validate เสมอ ใช้ parameterized query สำหรับฐานข้อมูล และ escape output
Superglobals เป็นพื้นฐานสำคัญของการพัฒนาเว็บด้วย PHP เพราะเป็นช่องทางที่สคริปต์รับข้อมูล HTTP request (query string, การส่งฟอร์ม, cookie, session, ไฟล์ที่อัปโหลด, ข้อมูลเซิร์ฟเวอร์) ดังนั้นการเข้าใจมันจึงเป็นความรู้พื้นฐานที่จำเป็นในการจัดการ input จากผู้ใช้ใด ๆ
การรู้ว่าแต่ละ superglobal เก็บอะไร ($_GET, $_POST, $_SERVER, $_SESSION ฯลฯ) และวิธีเข้าถึงข้อมูล request จำเป็นต่อการสร้างแอปพลิเคชัน PHP ใด ๆ
แต่ ประเด็นที่สำคัญที่สุดคือความปลอดภัย: ข้อมูลจาก $_GET/$_POST/$_COOKIE/$_REQUEST คือ input จากผู้ใช้ที่ไม่น่าเชื่อถือ และการใช้มันโดยตรงคือต้นตอของช่องโหว่เว็บที่พบบ่อยและอันตรายที่สุด (SQL injection, XSS)
การเข้าใจว่าข้อมูล request จาก superglobal ต้องถูก validate เสมอ ใช้อย่างปลอดภัย (parameterized query สำหรับฐานข้อมูล) และ escape ตอน output เป็นความรู้สำคัญด้านความปลอดภัย เพราะ superglobals คือจุดเข้าของ input จากผู้ใช้ การจัดการมันอย่างผิดพลาดคือจุดที่การละเมิดความปลอดภัยร้ายแรงของ PHP จำนวนมากเริ่มต้นขึ้น ทำให้การจัดการอย่างปลอดภัยเป็นความรับผิดชอบพื้นฐานของนักพัฒนา PHP ทุกคน (เฟรมเวิร์กสมัยใหม่อย่าง Laravel ห่อหุ้ม superglobals ไว้ใน request abstraction ที่ปลอดภัยกว่า แต่หลักการพื้นฐานที่ว่าอย่าไว้ใจ input ก็ยังคงเดิม)