register globals Directive เขียนเมื่อ 2009.06.30 โดย

Register Globals เป็น Directive ของ PHP เป็นส่วนสำคัญส่วนหนึ่งในการสร้างความปลอดภัยให้กับโปรแกรมที่เขียนขึ้น ความสำคัญของ register_globals นั้นคือการทำให้ชื่อตัวแปรนั้นๆมีค่าเป็น global หมายถึงไม่ว่าจะถูกเรียกใช้ในส่วนใดก็จะเป็นการเรียกจากตัวแปรตัวเดียวกัน เช่น

เมื่อ register_globals On

<?
$data = "modoeye.com";
function show(){
echo $data;
}
?>

จะได้ผลเป็น modoeye.com

เมื่อ register_globals Off

<?
$data = "modoeye.com";
function show(){
echo $data;
}
?>

จะได้ผลเป็นค่าว่าง หรือจะแสดง WARNING ว่าไม่มีตัวแปรดังกล่าว

แล้วสำคัญอย่างไร?

จะเห็นได้ว่าเมื่อ register_globals On ตัวแปรใดๆจะสามารถเรียกใช้ได้จากทุกส่วนของโปรแกรม ในทางกลับกันก็ยังสามารถถูกตั้งค่าได้จากส่วนต่างๆของโปรแกรมได้เช่นเดียวกัน เช่น

<?
// login.php
// เช็กว่ามีการ login หรือยัง เมื่อมีการล็อกอินแล้วให้เซ็ทค่าตัวแปร $authorized เป็น true
if (authenticated_user()) {
$authorized = true;
}

// เช็กว่าตัวแปร $authorized เท่ากับ true หรือไม่ถ้าใช่ให้เข้าไปส่วนของ member ได้
if ($authorized) {
include "/member/index.php";
}
?>

แล้วทำการเรียกใช้งาน login.php?authorized=1 ดังนั้นจะเสมือนว่าได้ทำการ login เรียบร้อยแล้วสามารถเข้าไปยังส่วนที่เป็นส่วนของ member ได้

การแก้ไขทำได้โดยแก้ไขที่ไฟล์ php.ini
register_globals = Off
ถ้าท่านที่ใช้งาน web hosting และไม่สามารถแก้ไขไฟล์ php.ini ได้ก็สามารถเพิ่ม เข้าไปในไฟล์ .htaccess ก็จะสามารถปิดการทำงานของ register_globals ได้เช่นเดียวกันครับ
php_flag register_globals Off

การเข้าถึงตัวแปรในสภาพแวดล้อมที่ register_globals เป็น Off
ในการเข้าถึงตัวแปรในสภาวะที่ register_globals เป็น Off นั้น PHP ได้สร้างตัวแปร Pre-defined Global Variables ไว้ด้วยเพื่อในการอ้างถึงตัวแปรที่มาจากคนละสภาพแวดล้อม โดยประกอบด้วย:
- $_REQUEST เป็น array ของตัวแปรที่ได้รับจากการส่งทั้งแบบ POST และ GET
- $_GET เป็น array ของตัวแปรที่ได้จากการส่งค่าแบบ GET
- $_POST เป็น array ของตัวแปรที่ได้จากการส่งค่าแบบ POST
- $_COOKIE เป็น array ของตัวแปร COOKIE
- $_SESSION เป็น array ของตัวแปร SESSION
- $_SERVER เป็น array ของตัวแปรค่าของระบบที่อ่านได้จาก Server
- $_FILES เป็น array ของตัวแปรที่ได้จากการ upload files ไปยัง Server
- $_ENV เป็น array ของตัวแปรค่าของสภาพแวดล้อมของระบบ (Environment)

ตัวอย่างการอ่านค่า
<?
echo "ค่าจากตัวแปร $_REQUEST"; print_r($_REQUEST); echo "\n";
echo "ค่าจากตัวแปร $_GET"; print_r($_GET); echo "\n";
echo "ค่าจากตัวแปร $_POST"; print_r($_POST); echo "\n";
echo "ค่าจากตัวแปร $_COOKIE"; print_r($_COOKIE); echo "\n";
echo "ค่าจากตัวแปร $_SESSION"; print_r($_SESSION); echo "\n";
echo "ค่าจากตัวแปร $_SERVER"; print_r($_SERVER); echo "\n";
echo "ค่าจากตัวแปร $_FILES"; print_r($_FILES); echo "\n";
echo "ค่าจากตัวแปร $_ENV"; print_r($_ENV); echo "\n";
?>



คำเตือนคำเตือน เนื้อหาต่างๆ ในบทความ รวมถึงรูปภาพทั้งหมดในบทความนี้ เป็นความเห็นส่วนตัวของผู้เขียนแต่ละคน ซึ่งแต่ละคนได้ทำการลงทะเบียน และเขียนบทความลงใน Modoeye Articles นี้โดยไม่มีค่าธรรมเนียมใดๆ บทความเหล่านี้เป้าหมายเพื่อการศึกษา และความบันเทิงเท่านั้น การนำส่วนหนึ่งส่วนใดของบทความไปใช้งาน ควรทำการอ้างอิงถึงผู้เขียนและแหล่งที่มาด้วย