เขียน รับ get post ใน form method ระวังโดน hack
หน้าแรก PHP MySQL เกร็ดความรู้ เขียน รับ get post ใน form method ระวังโดน hack
นี่เป็นปัญหามาก ในเป็นการสร้างนิสัยเสียในการเขียนโปรแกรมในภาษา PHP ในเรื่องการที่คนเขียน นิสัยเสีย หรือติดจากหนังสือบางเล่ม ที่ไม่ค่อยใช้ GET หรือ POST ในการรับค่าจาก form ต่างๆ ใน method ต่างๆ มันยังผลไปสู่การ Hack หรือการเจาะได้ เช่น เมื่อเร็วๆ นี้ ทำ script PHP สำหรับการ vote freshy boys/girls ที่ ม. ที่ผมเรียนอยู่ ผมหล่ะปวดกับการหล่ะหลวม ของตัวผมเองในการเขียน script ระบบ vote อย่างแรง ตัว form คือ
ตัวอย่างด้านล่าง มีช่องโหว่ครับ เพราะว่าในระบบ จะรับ แค่ poll_id เท่านั้นส่วน vote_for และ action ไม่ได้ทำการกรอง อ่าน POST หรือ GET แต่ประการใด จากด้านล่าง
- $poll_id = $_POST["poll_id"];
- require (poll/poll_cookie.php);
- include(poll/booth_inc.php);
ทำให้เกิด !!!!
- <meta http-equiv=Content-Type content=text/html; charset=iso-8859-1″ />
- <meta http-equiv=refresh content=930;URL=filephp.php?poll_id=5&vote_for=3″ />
- <noframes><body> </body></noframes>
เห็นไหมคืออะไร เค้ายิงผ่าน GET Method แทนครับ อ่านหมด 3 ตัวแปรเลย เพราะอะไร ? อย่างแรกครับ $poll_id = $_POST["poll_id"]; ไม่พอต่อการดัก method จาก GET แต่อย่างใด เพราะว่ายังไง ตัวแปรใน poll_id ที่อยู่ใน form มันก็ยังมาใส่ใน $poll_id ได้จาก GET Method ที่ไม่ได้ lock ซึ่งเช่นเดียวกับ vote_for เช่นกัน ที่มันก็ไปใส่ใน $vote_for ใน script ด้วยเช่นกัน ทำให้เกิดการตั้งเวลาการ vote ได้โดยที่คน vote ไม่ต้องอยู่ที่เครื่อง แค่เปิด browser page นี้ไว้ เท่านั้นเอง แถมถ้าเปิดไว้สัก 100 เครื่องนี่มหาศาลมากทีเดียว ผมเลยต้องกลับลำ และแ้ก้ระบบ script ใหม่หมดอีกครั้งโดยดัก 2 ตัวพอ เพราะว่า action อันนี้ไม่ค่อยสำคัญเท่า vote_for กับ poll_id ที่เป็นตัวจักรสำคัญ แก้คือ ดักทั้ง GET และ POST เราต้องการให้ Method ไหนเข้ามาก็ให้มันผ่านไปเท่าที่เราต้องการเท่านั้น
ผมเลยดักด้วยการรับค่า poll_id จากทั้ง GET และ POST Method ทั้งหมดด้วยการดักไว้ก่อน ตามด้วย Condition ตรวจสอบ ว่าต้องไม่มีการใส่ vote_for ใน GET Method หรือ มีการลักลอบใส่ผ่าน $vote_for มาแต่อย่างใดถ้ามีก็เด้งไป index.php ทันที แต่ถ้าไม่มีก็รับค่าจาก POST มาเลย แล้วทำการ run ตัว script ต่อไปครับ นี่เป็นสิ่งที่รูโหว่ของคนที่ไม่ชอบใช้ POST / GET Method ใน PHP ครับ หรือตั้งชื่อตัวแปรที่มารับ POST / GET Method ที่เหมือนกัน ทางแก้คือ
- ใช้ GET / POST Method เสมอๆ ในการรับค่าผ่าน form ต่าง script กัน
- ตั้งตัวแปรใน script ที่แตกต่างจาก GET /POST Method เข้าไว้ครับ
- ถ้าจำเป็นต้องตั้ง ก็ต้องมี function ในการเช็คตัวแปรที่ส่งผ่านเข้าออก script ให้มากครับ
- ใช้ function / class มาแก้ปัญหานี้ครับ ช่วยได้มาก สำหรับคนที่มีเวลาเขียนโปรแกรม หรือ optimize / debug เยอะๆ ครับ (อันนี้เร่งๆ พอสมควรครับ) อันนี้เป็นสิ่งเตือนในการเขียน script ที่เป็น public ได้มากเลยหล่ะครับ
ซึ่งปัญหานี้เกิดจากการใช้ register_global ใน php ที่ตั้ง enable ไว้นั้นเอง ถ้าปิดไปการใช้ตัวแปรภายใน php script ปลอดภัยมากขึ้น
ผมขอใช้คำว่า ขู่ให้กลัว เพราะเรื่องนี้จะไม่กระทบบางท่านที่ไม่สนใจ แต่อาจกระทบบางคนอย่างชัดเจน เพราะจะบอกว่าระบบ Internet ทุกวันนี้มีจุดบกพร่อง ที่ใหญ่มาก ตอนผมเริ่มศึกษาเรื่องที่ระบบตนเองถูก Hack ก็ต้องตกใจว่าทำไม ระบบส่วนในปัจจุบัน จึงมีช่องโหว่ที่ใหญ่ขนาดนี้ แล้วทำไมผู้คนที่ทราบ จึงไม่ออกมาประกาศกันอย่างจริงจัง ว่าสิ่งที่ผมกำลังจะเขียนต่อไปนี้ เกิดขึ้นได้ในทุกองค์กร และต้องป้องกัน มิใช่ปลอดให้เกิดขึ้นเช่นนี้
1. วิธีที่ 1. Sniffer : ความเดือดร้อนโดยตรงที่ผู้ใช้ได้รับ และผมช่วยไม่ได้ ทุกตัวอักษรที่ท่านพิมพ์ผ่าน browser จะถูก Hacker มองเห็นหมด ถ้าเขาคิดจะทำ และอยู่ในระบบ LAN วงเดียวกับท่าน และเว็บที่ท่านส่งข้อมูลไม่มีบริการ SSL รองรับ ซึ่งมีเว็บมากกว่า 80% ที่ยังไม่มี ssl ไว้บริการ (ตัวเลขนี้ประมาณ เพราะเห็นบริการ ssl น้อยมาก ถ้าไม่ใช้ e-commerce)
2. Netscape mail, Outlook, Eudora ที่ใช้บริการ POP3 ทุกครั้งที่ท่านเปิด get mail ใหม่ Hacker จะสามารถเห็นรหัสผ่าน และข้อมูลใน mail ทุกฉบับที่ท่านได้รับ ซึ่งมักเป็นคนในระบบเครือข่ายของท่าน แต่คนนอกก็ทำได้ ถ้า Server ที่ท่านเปิดบริการ ถูกใช้เป็นเครื่องมือ hack คนในองค์กรซะเอง
3. Telnet เป็นระบบที่ผมทดสอบ hack ตัวแรก ทุกครั้งที่ท่านพิมพ์อักษรใน telnet hacker จะเห็นหมด และเห็นทีละตัวอักษร ไม่ได้เห็นเป็นชุด ๆ แบบข้อมูลใน Browser
4. เกือบทุกฟรี e-mail ในไทย ยังไม่มี ssl ดังนั้นทันทีที่ท่าน พิมพ์ username และ password hacker ในร้าน net จะจับข้อมูลของท่านได้หมดว่าใช้อะไร
5. hotmail.com หรือ yahoo.com จะปลอดภัยเฉพาะหน้าแรก ส่วนหน้าที่เหลือ hacker จะเห็นหมด และหน้าแรกจะปลอดภัย ต่อเมื่อท่านเลือกที่จะรักษาความปลอดภัยเท่านั้น
Sniffer คือโปรแกรมที่ hacker ใช้จับ package ที่ส่งกันไปมาใน Internet เมื่อก่อนผมเข้าใจว่าต้อง run เฉพาะใน server ประเภท unix เท่านั้น แต่คุณประเสริฐ ไปหามาให้ผมได้ลอง ซึ่งสามารถใช้งานบน windows และมี option ให้เลือกจับ switch ได้ด้วย (จับ switch ผมยังไม่ได้ทดสอบ เพราะในระบบไม่มีใช้)
เช่น นักเรียนประถม 4 ที่มีพี่เรียนในมหาวิทยาลัย แนะนำให้นำโปรแกรมขนาด 30 Mb ใช้เวลา install บน windows แบบ click อย่างเดียว ไม่ถึง 10 นาที ไป install ในเครื่องที่โรงเรียน โปรแกรมนี้สามารถเลือกจับเป็นเครื่องได้ ว่าต้องการจับเครื่องใด หรือ switch ตัวใด ทันทีที่ครูใช้ telnet เข้าไปใน server เครื่องใดก็ตาม เด็กป.4 คนนั้นก็จะทราบรหัสผ่าน su ได้ทันที .. ต่อจากนั้นก็แล้วแต่โชคชะตาของ server หละครับ (ตัวอย่างครับ แค่ตัวอย่าง)
ถึงแม้ sniffer จะป้องกันยาก แต่ก็ป้องกันได้ด้วย ssh และ ssl ท่านสามารถหารายละเอียดได้จากเจ้าของระบบปฏิบัติการ ว่ามีโปรแกรมสนับสนุน 2 มาตรฐานดังกล่าวอย่างไร ในส่วนของ ssl ที่ผู้บริการไม่ค่อยนำมาใช้ เพราะโดยปกติ ต้องเสียเงินซื้อ
พบโปรแกรม ของ Cain & Abel v2.9 เป็น Sniffer ที่เพื่อนผมทดสอบ และก็ทำงานได้จริงในเครือข่ายที่ใช้ Hub [Download. 5 MB]
ผู้ดูแลอาจนำไปทดสอบระบบของตนเองว่าปลอดภัยหรือไม่ .. แต่เป็นดาบสองคม ถ้าผู้ไม่ประสงค์ดีนำไปใช้ในเครือข่ายที่ไม่ให้ความสำคัญกับความปลอดภัย
วิธีที่ 2. Frontal attack
โจมตีแบบตรง ๆ ให้ Server ล้ม ซึ่งเคยมีข่าวว่า hacker ได้ใช้ server ทั่วโลกที่ยึดได้ ส่งคำสั่งโจมตีไปที่yahoo.com จนทำให้ server ของเขา ต้องปิดบริการไปชั่วขณะ นี่เป็นเพียง case หนึ่ง เพราะมีวิธีอีกมากมายที่จะทำให้ server หยุดบริการไป แต่ปัญหานี้อาจไม่ร้ายแรงสำหรับผู้ที่ทำ server ที่ไม่เป็นธุรกิจ เพราะหลังจากล่มไป ก็ boot ใหม่ หรือเข้าไปหาสาเหตุ และก็แก้ไขไปตามนั้น ก็สามารถกลับมาบริการได้เหมือนเดิม เพราะผู้ที่โจมตีจะต้องมีเครื่อง และก็ต้องใช้เครื่องให้ทำงานหนัก แต่ผมการโจมตีคือการก่อกวน ไม่ได้เป็นการยึด site ผลการโจมตีแบบนี้ แค่ก่อความรำคาญเท่านั้น
วิธีที่ 3. Exploiting a security bug or loophole
เรื่องนี้เป็นเรื่องใหญ่สำหรับ sysadmin เพราะระบบทุกระบบที่มีอยู่จะมีตั้งแต่ตอบติดตั้งระบบเสร็จ ทันที่ที่ติดตั้งเสร็จ ระบบก็มีจุดบกพร่องที่จะให้ hacker เข้ามาในระบบในฐานะ superuser ได้ ผู้ดูแลจะต้องหาโปรแกรมมา update ให้ทันสมัย เมื่อสมบูรณ์แล้ว ก็ต้องหมั่นเข้าไปอ่านข่าวใน internet เช่นที่ securityfocus.com เพราะถ้า hacker ทราบวิธีเจาะระบบ ซึ่งเป็นวิธีใหม่ที่พบกันเกือบทุกเดือน ก่อนท่าน update ระบบของท่านก็จะถูก hack ได้ทันที มีข่าวอยู่บ่อย ที่ระบบใน server ระดับโลกถูก hack เช่น apache.org, sourceforge.net,isinthai.com เป็นต้น โดยเฉพาะ isinthai.com ผมเขียนเหตุการเกี่ยวกับการถูก hack ไว้ 10 กว่าครั้ง ซึ่งอาจถึง 20 ในไม่ช้าก็ได้ เพราะปัญหาของการไม่ upgrade ระบบให้ทันกับความรู้ของ hacker
refer: http://lengm0.wordpress.com/tag/%E0%B9%81%E0%B8%AE%E0%B8%81%E0%B9%80%E0%B8%81%E0%B8%AD%E0%B8%A3%E0%B9%8C/page/3/
ขึ้นไปด้านบน
