เว็บโฮสติ้ง Pinkkeyhost :: Support Center

Member Center => PHP & Opensource => ข้อความที่เริ่มโดย: PinkkeyHost ที่ 07 ก.ค. 2006 20:56



หัวข้อ: การแก้ปัญหา script ไม่รองรับ register_globals=off
เริ่มหัวข้อโดย: PinkkeyHost ที่ 07 ก.ค. 2006 20:56
สำหรับค่า Register_Global นั้น เพื่อความปลอดภัยของระบบโดยรวม
ทางโฮสได้ตั้งค่า default ไว้ที่ off สำหรับทุกๆ user

ซึ่งโดยทั่วไปแล้วจะสามารถใช้งาน script สำเร็จรูปทั่วๆไปได้อย่างไม่มีปัญหาใดๆ
อย่างไรก็ดีมี script บางตัวที่ยังจำเป็นต้องใช้ register_globals on จึงจะสามารถทำงานได้

ดังนั้น หากสมาชิกท่านใดมีความจำเป็นต้องใช้ script ที่ต้องการ register_globals on
สามารถติดต่อฝ่าย support เพื่ิอให้แก้ไขค่าจาก off เป็น on ให้กับท่านได้

ซึ่งการตั้งค่า on นี้จะมีผลกับทุกๆ domain ทั้งหมดภายใต้ user account ของท่าน
แต่จะไม่มีผลกับ user อื่นๆ ซึ่งยังคงใช้ค่าเป็น off ตาม default ของทางโฮส

อย่างไรก็ดีสำหรับผู้ที่พัฒนาระบบขึ้นเองควรที่จะรองรับ register_globals=off ได้อยู่แล้ว
ซึ่งสามารถแก้ไขระบบให้รองรับได้ง่ายๆตามนี้

หลักการคือ
1. ตรวจสอบค่า register_globals ก่อนหากเป็น on ก็ไม่ต้องทำอะไร
2. extract ตัวแปล GET POST COOKIE SESSION SERVER โดยตรวจสอบก่อนว่ามีค่าส่งเข้ามา
โดยการแก้ไข script โดยเพิ่ม code ต่อไปนี้ที่ต้นไฟล์ .php ทุกไฟล์

โค๊ด:
$globals_test = @ini_get('register_globals');
if ( isset($globals_test) && empty($globals_test) ) {
   $types_to_register = array('GET', 'POST', 'COOKIE', 'SESSION', 'SERVER');
   foreach ($types_to_register as $type) {
      $arr = @${'_' . $type};
      if (@count($arr) > 0)
         extract($arr, EXTR_SKIP);
   }
}
หรือเขียนแีกแบบหนึ่งก็ได้เช่นกัน
โค๊ด:
$globals_test = @ini_get('register_globals');
if ( isset($globals_test) && empty($globals_test) ) {
   if ( !empty($_GET) ) { extract($_GET, EXTR_SKIP); }
   if ( !empty($_POST) ) { extract($_POST, EXTR_SKIP); }
   if ( !empty($_COOKIE) ) { extract($_COOKIE, EXTR_SKIP); }
   if ( !empty($_SESSION) ) { extract($_SESSION, EXTR_SKIP); }
   if ( !empty($_SERVER) ) { extract($_SERVER, EXTR_SKIP); }
}

ซึ่งสำหรับการปรับแก้ไม่จำเป็นต้องเพิ่ม code ในต้นไฟล์ทุกไฟล์ครับ
เพียงแค่ไล่ดูว่าระบบ include ไฟล์ใหนทุกครั้ง แล้วไปเพิ่มแค่ในไฟล์ที่ถูก include เท่านั้นก็ได้แล้ว
ส่วนมากจะเป็นไฟล์ config.php หรือไม่ก็ function.php
เช่นระบบ smeweb สามารถแก้ไขได้โดยการเพิ่ม code ใน config.php เพียงไำฟล์เดียวระบบก็สามารถทำงานได้ทันที เนื่องจากทุกไฟล์ต้อง include ไฟล์ config.php เสมอ
อย่างไรก็ดีการแก้ไขดังกล่าวยังไม่ครอบคลุมถึงการ upload ไฟล์ผ่านตัวแปล $_FILES ซึ่งต้องแก้ไขในส่วนของการ upload ไฟล์ใน code ด้วย

สำหรับระบบ smeWeb ทางเวบได้ทำการแก้ไขและเปิดให้ download แล้ว
และได้ส่งให้กับผู้พัฒนาแล้ว คาดว่าเวอร์ชั่นถัดไปจะรองรับ register_global=off โดยไม่ต้องแก้ไขเพิ่มเติม


หัวข้อ: Re: การแก้ปัญหา script ไม่รองรับ register_globals=off
เริ่มหัวข้อโดย: bunpot ที่ 05 พ.ย. 2006 18:59
ขอนำข้อมูลนี้ไปใช้ได้มั้ยครับ (แบบทุกตัวอักษรเลยน่ะครับ ขี้เกียจพิมพ์เอง)
พอดีกำลังจัดทำคู่มือการใ้ช้งานโฮสติ้งอยู่น่ะครับ ทำเสร็จแล้วเดี๋ยวจัดส่งให้คุณแมนเล่มนึง (พร้อมต้นฉบับเผื่อนำไปดัดแปลงแก้ไข)

 ;D

ขอบคุณครับ
บรรพต


หัวข้อ: Re: การแก้ปัญหา script ไม่รองรับ register_globals=off
เริ่มหัวข้อโดย: PinkkeyHost ที่ 05 พ.ย. 2006 20:50
ขอนำข้อมูลนี้ไปใช้ได้มั้ยครับ (แบบทุกตัวอักษรเลยน่ะครับ ขี้เกียจพิมพ์เอง)
พอดีกำลังจัดทำคู่มือการใ้ช้งานโฮสติ้งอยู่น่ะครับ ทำเสร็จแล้วเดี๋ยวจัดส่งให้คุณแมนเล่มนึง (พร้อมต้นฉบับเผื่อนำไปดัดแปลงแก้ไข)

 ;D

ขอบคุณครับ
บรรพต

ได้เลยครับ  :)


หัวข้อ: Re: การแก้ปัญหา script ไม่รองรับ register_globals=off
เริ่มหัวข้อโดย: panatdapo ที่ 03 ก.ย. 2008 12:08
สำหรับค่า Register_Global นั้น เพื่อความปลอดภัยของระบบโดยรวม
ทางโฮสได้ตั้งค่า default ไว้ที่ off สำหรับทุกๆ user

ซึ่งโดยทั่วไปแล้วจะสามารถใช้งาน script สำเร็จรูปทั่วๆไปได้อย่างไม่มีปัญหาใดๆ
อย่างไรก็ดีมี script บางตัวที่ยังจำเป็นต้องใช้ register_globals on จึงจะสามารถทำงานได้

ดังนั้น หากสมาชิกท่านใดมีความจำเป็นต้องใช้ script ที่ต้องการ register_globals on
สามารถติดต่อฝ่าย support เพื่ิอให้แก้ไขค่าจาก off เป็น on ให้กับท่านได้

ซึ่งการตั้งค่า on นี้จะมีผลกับทุกๆ domain ทั้งหมดภายใต้ user account ของท่าน
แต่จะไม่มีผลกับ user อื่นๆ ซึ่งยังคงใช้ค่าเป็น off ตาม default ของทางโฮส

อย่างไรก็ดีสำหรับผู้ที่พัฒนาระบบขึ้นเองควรที่จะรองรับ register_globals=off ได้อยู่แล้ว
ซึ่งสามารถแก้ไขระบบให้รองรับได้ง่ายๆตามนี้

หลักการคือ
1. ตรวจสอบค่า register_globals ก่อนหากเป็น on ก็ไม่ต้องทำอะไร
2. extract ตัวแปล GET POST COOKIE SESSION SERVER โดยตรวจสอบก่อนว่ามีค่าส่งเข้ามา
โดยการแก้ไข script โดยเพิ่ม code ต่อไปนี้ที่ต้นไฟล์ .php ทุกไฟล์

โค๊ด:
$globals_test = @ini_get('register_globals');
if ( isset($globals_test) && empty($globals_test) ) {
   $types_to_register = array('GET', 'POST', 'COOKIE', 'SESSION', 'SERVER');
   foreach ($types_to_register as $type) {
      $arr = @${'_' . $type};
      if (@count($arr) > 0)
         extract($arr, EXTR_SKIP);
   }
}
หรือเขียนแีกแบบหนึ่งก็ได้เช่นกัน
โค๊ด:
$globals_test = @ini_get('register_globals');
if ( isset($globals_test) && empty($globals_test) ) {
   if ( !empty($_GET) ) { extract($_GET, EXTR_SKIP); }
   if ( !empty($_POST) ) { extract($_POST, EXTR_SKIP); }
   if ( !empty($_COOKIE) ) { extract($_COOKIE, EXTR_SKIP); }
   if ( !empty($_SESSION) ) { extract($_SESSION, EXTR_SKIP); }
   if ( !empty($_SERVER) ) { extract($_SERVER, EXTR_SKIP); }
}

ซึ่งสำหรับการปรับแก้ไม่จำเป็นต้องเพิ่ม code ในต้นไฟล์ทุกไฟล์ครับ
เพียงแค่ไล่ดูว่าระบบ include ไฟล์ใหนทุกครั้ง แล้วไปเพิ่มแค่ในไฟล์ที่ถูก include เท่านั้นก็ได้แล้ว
ส่วนมากจะเป็นไฟล์ config.php หรือไม่ก็ function.php
เช่นระบบ smeweb สามารถแก้ไขได้โดยการเพิ่ม code ใน config.php เพียงไำฟล์เดียวระบบก็สามารถทำงานได้ทันที เนื่องจากทุกไฟล์ต้อง include ไฟล์ config.php เสมอ
อย่างไรก็ดีการแก้ไขดังกล่าวยังไม่ครอบคลุมถึงการ upload ไฟล์ผ่านตัวแปล $_FILES ซึ่งต้องแก้ไขในส่วนของการ upload ไฟล์ใน code ด้วย

สำหรับระบบ smeWeb ทางเวบได้ทำการแก้ไขและเปิดให้ download แล้ว
และได้ส่งให้กับผู้พัฒนาแล้ว คาดว่าเวอร์ชั่นถัดไปจะรองรับ register_global=off โดยไม่ต้องแก้ไขเพิ่มเติม


อย่างไรก็ดีการแก้ไขดังกล่าวยังไม่ครอบคลุมถึงการ upload ไฟล์ผ่านตัวแปล $_FILES ซึ่งต้องแก้ไขในส่วนของการ upload ไฟล์ใน code ด้วย

คือพอดีต้องการ upload ไฟล์ผ่านตัวแปล $_FILES ต้องแก้ไข Code ยังงัยบ้างเหรอค่ะ