หน้าแรก > วิถีทางแห่งโปรแกรมเมอร์ > ตั้งค่า php.ini ให้เป็น register_globals=Off

ตั้งค่า php.ini ให้เป็น register_globals=Off

เรื่องเก่าเล่าใหม่ครับ
==========
ตั้งแต่ PHP 4.2.x ขึ้มา หลังติดตั้งแล้ว จะมีค่า Default ของ register_globals เป็น Off
แต่ใน Server ที่ติดตั้ง Controlpanel เพื่อให้บริการ Hosting แล้ว ส่วนใหญ่ ค่า register_globals ในไฟล์ php.ini จะถูกตั้งเป็น on มาเลย
เจอกรณีนี้ทั้ง cPanel และ Ensim ครับ Plesk ยังไม่เคยใช้ แต่เดาว่าน่าจะเป็นด้วย

register_globals เป็น On หรือ Off ถึงจะดี และทำไมถึงต้องเลือกเช่นนั้น

ผมไม่ได้เป็น Programmer นะครับ เลยพอจะบอกได้แค่แบบบ้านๆ ว่า
การตั้งค่า register_globals เป็น On จะเป็นการเปิดโอกาสให้ Hacker สามารถทำการ Execute คำสั่งระยะไกลบน Server ของคุณได้

ข้อมูลที่ไปค้นๆ มาครับ
จาก http://php.deeserver.net

QUOTE
เรื่อง reigister global = off เป็นเรื่องที่สำคัญมากครับ ในเรื่องของ security
อย่างว่า เช่น ถ้าคุณเขียน code แบบนี้
<?
if ($auth == 1) {
$login = 1;
Header (Location : restrict.php)
} else {
echo "Access Denied";
}
ถ้ามีซักคนที่รู้ source code คุณ เขาสามารถ force ตัวแปร $auth ของคุณได้ทันที
เช่น http://localhost/login.php?auth=1 (แบบนี้คือ GET นะครับ)
แค่นี้เขาก็สามารถเข้าสู่ระบบได้ทันที แต่ถ้าเป็นแบบ Off เขาไม่สามารถจะ force ตัวแปรได้เลย
เช่น เราให้ กำหนดให้รับค่าตัวแปร $auth เฉพาะ POST อย่างเดียวไม่รับ GET ก็ จะเขียน
โค๊ดแบบนี้นะครับ
$auth = $_POST[‘auth’];
ตรงนี้ก็จะช่วยป้องกันการ force ตัวแปรได้ สำหรับผมคงอธิบายได้ไม่มากเท่าไหร่ คงต้อง
ไปหาอ่านดูใน http://www.php.net นะครับ

และจาก http://www.expert2you.com

QUOTE
การ set ให้ register_globals เป็น off ทำให้ตัวแปรที่เป็น Environment, Get, Post, Cookies และ Server จะไม่เป็น global variable ตามปกติครับ เช่น แต่ก่อนเราอาจจะเรียกตัวแปร server ที่ชื่อว่า $PHP_SELF ได้เลยโดยอ้าง $PHP_SELF แต่ถ้าเป็น php version 4.2 set register_globals off ต้องอ้างเป็น $_SERVER["PHP_SELF"] ครับ หรือที่มีปัญหากันบ่อยก็เช่น ตัวแปรที่ submit มาจากใน form ก็ต้องอ้างเป็น $_REQUEST["ชื่อตัวแปรที่มาจากใน FORM"] เหมือนกันครับ ซึ่งแต่เดิมเราอาจอ้างชื่อได้เลยโดยตรง ซึ่งถ้าเจออย่างนี้วิธีแก้ง่ายๆ คือ เข้าไปแก้ file php.ini โดยดูตรง register_globals ว่าเป็น off หรือเปล่า ถ้าเป็นให้แก้เป็น on ก็จบครับ แต่ถ้าแก้ไม่ได้ คงต้องเปลี่ยน source code เอาครับ คือบรรทัดไหนที่มีการเรียกตัวแปรพวกนี้ก็ตามไปอ้างให้ถูกให้หมดครับ

ส่วนที่ทำไม php 4.2 เป็นต้นมาเขาถึงแก้ให้เป็นอย่างนี้ ซึ่งทำให้ยุ่งยากเปล่าๆนี่ ก็มีเหตุผลครับ เนื่องจากเขากังวลเกี่ยวกับเรื่อง security ครับ คือถ้าเป็นแบบเดิมนี่ ใครๆก็สามารถส่งตัวแปรมาที่ script ที่จะ execute ได้เลยครับ ซึ่งอาจจะไปทับกับตัวแปรที่เราต้องใช้งานทำให้ตีความผิดและเผลอๆหากเป็นตัวแ ปรที่เกี่ยวกับการ check security ก็อาจจะเป็น break การทำงานของโปรแกรมได้ครับ ดังนั้นเพื่อเป็นแนวทางในการปฏิบัติที่ดี ควรทำตาม default ใหม่ที่เขา set มาให้ครับ

ซึ่งประสบการณ์ตรงของผม เคยโดนมาแล้ว สมัยที่ยังวางเครื่องอยู่ที่ ev1servers ซึ่งมีลูกค้าบางราย ใช้ Script โบราณ ต้องตั้ง register_globals=On
เมื่อใช้งานไปได้ระยะหนึ่ง ก็มี Hacker เข้ามาเจาะที่เวบหนึ่งบนเครื่องเดียวกัน โดยใส่คำสั่ง DoS ไว้ ส่งผลให้เครื่องผมโดน Unplugged ไปโดยทันที

จึงแนะนำว่า ถ้าเป็นไปได้ น่าจะตั้งค่า register_globals=Off ไว้ก่อน น่าจะมีความปลอดภัยเพิ่มในอีกระดับหนึ่ง

การตั้งค่า register_globals=Off บน Server Ensim
ควรทำตั้งแต่เริ่มต้นเลย เพราะ Ensim จะมีระบบ Virtual Private File System ซึ่งในการสร้างเวบไซต์แต่ละครั้ง จะสร้างไฟล์ php.ini ของแต่ละไซต์ขึ้นมาใหม่ด้วย

คุณสามารถแก้ไขได้โดย

Root login
#pico /etc/virtualhosting/templates/apache/etc/php.ini

หาบรรทัดของ register_globals แล้วแก้จาก On เป็น Off
กด Control+X
แล้วกด Enter เพื่อ Save ไฟล์นั้น

แล้วทำแบบเดียวกันนี้อีกครั้ง
#pico /etc/php.ini

เมื่อเสร็จแล้ว ให้ Restart Apache ครับ

หากลูกค้ามีปัญหา ต้องการใช้ Register_globals=On
สามารถแก้ไขเฉพาะเวบได้ โดย
#pico /home/virtual/domain.com/etc/php.ini
แล้วแก้เป็น On

หรือให้ลูกค้าแก้โค้ดเอา ชัวร์สุดครับ
การแก้โค้ดให้ใช้งานกับ php.ini ที่ register_globals=Off
ข้อมูลจาก http://mcu1.psu.ac.th/

QUOTE
ปล่อยให้เป็น register_globals = Off ก็ต้องแก้วิธีการรับข้อมูล เช่น จาก page ที่ 1 ส่งมาเป็น name แบบ post ปกติจะรับโดยใช้ $name แบบนี้จะไม่ได้ ให้แก้ใหม่เป็น รับแบบ $_POST[‘name’] แทนครับ

โดยปรกติแล้ว Script ใหม่ๆ จะรองรับการใช้งาน register_globals=Off กันหมดแล้ว ถ้าลูกค้าไม่ยอมแก้ ก็เตรียมรับมือกับ Hacker ได้เลยครับ

ถ้าข้อมูลผิดพลาด หรือตกหล่น ต้องขออภัยมา ณ ที่นี้ครับ tongue.gif

Advertisements
  1. ยังไม่มีความเห็น
  1. No trackbacks yet.

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

%d bloggers like this: