บทความนี้เกี่ยวกับความปลอดภัยของ PHP ในส่วนของ register_globals ใน php.ini ครับ
โดยเรามาดูว่า register_globals ใช้ทำอะไรก่อนดีกว่าครับ
โดยปกติแล้วการเรียกใช้ตัวแปรตั้งแต่ PHP รุ่นแรกๆแล้วจะใช้การเรียกผ่านตัวแปร เช่น $data โดยถ้ามีการส่งค่าผ่านจากเว็บเพจหนึ่งไปยังอีกเพจหนึ่งสามารถทำได้ เช่น http://www.modoeye.com/index.php?data=1234
ในกรณีนี้เราสามารถสั่งแสดงผลตัวแปร $data ได้โดยตรง เช่น echo $data;
แล้วเกี่ยวกับความปลอดภัยอย่างไรหรือครับ?
ที่ registerglobals เกี่ยวกับความปลอดภัยก็เนื่องจาก ถ้ามีผู้ไม่ประสงค์ดีรู้ว่าตัวแปรใน Code ของเรามีตัวแปรอะไรบ้างเขาก็สามารถล่วงรู้ความลับของระบบของเราได้ง่ายครับ เช่น
แล้วนำไปวางไว้ที่ root ของเว็บไซท์เท่านั้นครับ
โดยเรามาดูว่า register_globals ใช้ทำอะไรก่อนดีกว่าครับ
โดยปกติแล้วการเรียกใช้ตัวแปรตั้งแต่ PHP รุ่นแรกๆแล้วจะใช้การเรียกผ่านตัวแปร เช่น $data โดยถ้ามีการส่งค่าผ่านจากเว็บเพจหนึ่งไปยังอีกเพจหนึ่งสามารถทำได้ เช่น http://www.modoeye.com/index.php?data=1234
ในกรณีนี้เราสามารถสั่งแสดงผลตัวแปร $data ได้โดยตรง เช่น echo $data;
แล้วเกี่ยวกับความปลอดภัยอย่างไรหรือครับ?
ที่ registerglobals เกี่ยวกับความปลอดภัยก็เนื่องจาก ถ้ามีผู้ไม่ประสงค์ดีรู้ว่าตัวแปรใน Code ของเรามีตัวแปรอะไรบ้างเขาก็สามารถล่วงรู้ความลับของระบบของเราได้ง่ายครับ เช่น
<?php
// login.php// เช็กว่ามีการ login หรือยัง เมื่อมีการล็อกอินแล้วให้เซ็ทค่าตัวแปร $authorized เป็น true
if (authenticated_user())
{
$authorized =
true;
}
// เช็กว่าตัวแปร $authorized เท่ากับ true หรือไม่ถ้าใช่ให้เข้าไปส่วนของ member ได้
if ($authorized) {
include
"/member/index.php";
}
?>
จากตัวอย่างจะเห็นว่าเป็นการล็อกอินอย่างง่ายๆครับ ซึ่งถ้ามีการเซ็ท
register_globals เป็น On ไว้การที่จะเข้าไปในส่วนของ member
นั้นสามารถทำได้โดยการผ่านค่า login.php?authorized=1 ซึ่งจะทำให้ตัวแปร
$authorized มีค่าเป็น true ทำให้บุคคลผู้นั้นสามารถเข้าไปในส่วนของ
member ได้โดยง่ายครับ
การแก้ไขสามารถทำได้โดยเข้าไปแก้ไขไฟล์ php.ini ครับ
แต่สำหรับท่านที่ใช้บริการ Hosting ซึ่งไม่สามารถเข้าไปแก้ไขได้เอง และ
Directive ตัวนี้ไม่สามารถแก้ไขในขณะ runtime ได้ (ini_set() ไม่ได้)
ไม่ต้องกังวลครับมีวิธีแก้ไขได้โดยการเขียนไฟล์ .htaccess ขึ้นมาครับ
หรือเขียนต่อจากของเดิมก็ได้ในกรณีที่มีไฟล์นี้อยู่แล้ว โดยเขียน
php_flag register_globals Offแล้วนำไปวางไว้ที่ root ของเว็บไซท์เท่านั้นครับ

















