|
|
 |
ประกาศวันที่ 21-10-2007 18:00:42
ปัญหาการใช้งาน register globals กับระบบความปลอดภัยของ Server เรียนท่านลูกค้า
เนื่องจาก Server ของเราแต่ละเครื่อง ได้ติดตั้ง php ตามมาตรฐานที่ทาง php.net ได้ประกาศไว้หลายปีก่อนแล้ว (ทางเราได้ทำการ update patch สำหรับบางเครื่อง Server เมื่อเร็ว ๆ นี้)
http://th.php.net/manual/en/security.globals.php
ซึ่งแนะนำให้ทำการ Register Global = off ไว้ เพื่อป้องกันการโดนโจมตีผ่าน script ซึ่งการตั้งค่าดังกล่าวมีผลให้ผู้พัฒนาที่พัฒนาโปรแกรมแบบ global จะมีปัญหาในการรับส่งค่าตัวแปรดังนี้
การส่งค่าตัวแปรด้วยวิธี GET เป็นการส่งค่าผ่าน URL เช่น http://www.naxza.com/article.php?id=121 ในลักษณะนี้มีการส่งค่าตัวแปร id เข้าไปที่ไฟล์ article.php ซึ่งหากเป็นการ on register global ไว้ จะสามารถรับค่าได้คือ
echo $id;
แต่เมื่อ off register global แล้ว จะต้องรับค่าด้วย
echo $_GET['id'];
แทนครับ สำหรับผู้พัฒนาภาษาโปรแกรม php รุ่นเก่า ๆ ที่ทราบเรื่องนี้ และยังคงใช้วิธีการรับค่าแบบดังกล่าว ถือเป็นความผิดพลาดในระบบอย่างมาก ซึ่งอาจจะทำให้เว็บไซต์ของท่านโดนโจมตีได้โดยง่าย และอาจจะส่งผลกระทบต่อระบบโดยรวม ทางเราจะทำการตรวจสอบเรื่องนี้อย่างละเอียด หากพบการโดนโจมตีและอาจจะต้องทำการระงับเว็บไซต์ของท่านครับ
ทั้งนี้แนวทางแก้ไขปัญหามีด้วยกันหลายวิธี เช่น
1. ทำการแก้ไข code ที่เขียนรับค่าแบบเก่า $id มาเป็น $_GET['id'] หรือ $_POST['id'] คือรับให้ถูกต้องตามหลักการรับค่ามา Method (วิธีการ) ที่ถูกต้องครับ สำหรับท่านลูกค้าที่ใช้ opensource เช่น phpnuke mambo ต้องตรวจสอบกับทางผู้พัฒนว่า version ใด ได้มีการแก้ไขปัญหาดังกล่าวแล้วหรือไม่ อย่างไรครับ
(Note: phpnuke น่าจะต้องใช้เป็น phpnuke 6.5 ครับ อ้างอิงจาก http://nuke.thaihealth.net/article55.html)
2. ทำการแทรก script ด้านล่างนี้ลงไปที่แต่ละไฟล์ที่มีการรับค่าตัวแปร โดยแทรกไว้บรรทัดบนสุดเลยครับ
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This is a fix if register_globals is turned off ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ if(!$PHP_SELF){ if($HTTP_POST_VARS) {extract($HTTP_POST_VARS, EXTR_PREFIX_SAME, "post_");} if($HTTP_GET_VARS) {extract($HTTP_GET_VARS, EXTR_PREFIX_SAME, "get_");} if($HTTP_COOKIE_VARS) {extract($HTTP_COOKIE_VARS, EXTR_PREFIX_SAME,"cookie_");} if($HTTP_ENV_VARS) {extract($HTTP_ENV_VARS, EXTR_PREFIX_SAME, "env_");} } if($PHP_SELF == ""){ $PHP_SELF = $HTTP_SERVER_VARS[PHP_SELF]; }
วิธีนี้จะทำให้ระบบความปลอดภัยอยู่ที่ 70-80% ในส่วนของ register globals security ครับ
3. เป็นวิธีที่ง่ายที่สุดครับ คือ ให้ server ทำการเปิดระบบ register globals ของเว็บไซต์คุณให้เป็น on (เฉพาะเว็บไซต์คุณ) ซึ่งก็จะทำให้คุณไม่ต้องแก้ไข code ใด ๆ เลยครับ แต่ในกรณีนี้ ทางคุณต้องรับทราบปัญหาว่าอาจจะโดนโจมตีได้ทุกเมื่อ และเราไม่สามารถปกป้องข้อมูลใด ๆ ของคุณได้เลย และหากพบปัญหาใดที่อาจจะก่อให้เกิดการบั่นทอนประสิทธิภาพการทำงานของ Server โดยรวมตาม นโยบายการใช้งาน ทางเราจะทำการระงับเว็บไซต์ของท่านทันทีครับ (สำหรับลูกค้าที่มีความจำเป็นต้องใช้วิธีนี้ให้แจ้งชื่อเว็บไซต์ และความต้องการเข้ามาทาง E-mail ครับ)
จึงเรียนมาเพื่อทราบ Naxza Web Hosting
รายละเอียดเพิ่มเติม
http://www.narisa.com/blog/patrickz/index.php?showentry=346 http://www.thaicdrom.net/articles/4/1/Register-global-problem-PHP--NEOaAeI-Register-Global-I-PHP/Page1.html http://vuthi.blogspot.com/2005/12/php-44.html http://www.thaihosttalk.com/th1/index.php?topic=2944.0;wap2 http://www.thainuke.org/modules.php?name=Forums&file=viewtopic&t=13985 http://72.14.253.104/search?q=cache:iZf0V2mEOHkJ:www.opentle.org/th/node/4667+%E0%B8%9B%E0%B8%B1%E0%B8%8D%E0%B8%AB%E0%B8%B2+register+global&hl=th&ct=clnk&cd=17&gl=th
|
|
 |
|
|
|