การอัพเดท WordPress
เรียน wordpress

การอัพเดท WordPress


สงวนลิขสิทธิ์

เช่นเดียวกับซอฟต์แวร์ทั่วๆไป WordPress ต้องการมีการอัพเดทอย่างสม่ำเสมอและควรจะทันทีที่มีการประกาศให้อัพเดท ซึ่งปัจจุบันคือ 3.5.2 การอัพเดท WordPress มีวิธีหลักๆอยู่สองวิธี คือ ใช้การอัพเดทอัตโนมัติใน dashboard และใช้การอัพโหลดไฟล์ของเวอร์ชันใหม่เข้าไปแทนที่

อย่าละเลยการอัพเดท

ผู้ใช้ทั่วไปมักจะละเลยที่จะอัพเดท เพราะคิดว่าไม่จำเป็น บางคนคิดว่าการอัพเดทเป็นการปรับปรุงประสิทธิภาพเล็กๆน้อยๆซึ่งตนเองคิดว่าที่มีอยู่ก็เพียงพออยู่แล้ว หรือคิดว่าตัวเองคงไม่เป็นเป้าหมายของการการแฮค อย่างเช่นเห็นว่าเป็นเว็บไซต์ส่วนตัวหรือเป็นกิจการขนาดเล็กที่ไม่น่าจะมีใครมาสนใจทำให้เสียหาย ซึ่งคิดผิดถนัด WordPress และ opensource อื่นๆมีลักษณะเหมือนกันคือเป็นโปรแกรมที่มีการเปิดเผยซอร์ซโค้ดและมีชุมชนที่คุยกันเรื่องข้อบกพร่องทั้งในแง่ประสิทธิภาพ การใช้งาน และช่องโหว่ที่แฮคเกอร์สามารถเข้ามาเจาะได้อยู่อย่างสม่ำเสมอ และไม่เป็นความลับใดๆ

สำหรับคนที่คิดว่าคงไม่มีใครมาแฮค ถูกครึ่งหนึ่งครับ เพราะที่เข้ามาแฮคตอนแรกมักจะเป็นหุ่นยนต์ (robot) หรือโปรแกรมที่เขียนขึ้นมาเพื่อเจาะเข้าเว็บไซต์ที่ใช้เวอร์ชันที่มีช่องโหว่ ซึ่งหุ่นยนต์เหล่านี้จะค้นหาเว็บไซต์ที่ใช้ WordPress เวอร์ชันเป้าหมายได้อย่างรวดเร็ว หากเว็บไซต์เราน่าสนใจ (สำหรับแฮกเกอร์) และหุ่นยนต์เจาะไม่ได้ แฮคเกอร์ที่เป็นคนถึงจะลงมือเอง

Zero-day

และเมื่อพบข้อบกพร่องโดยเฉพาะที่เป็นช่องโหว่ที่จะให้แฮคเกอร์เจาะเข้ามาได้ เวอร์ชันที่ใช้อยู่ก็จะมีความเสี่ยงที่จะถูกโจมตีในทันทีจนกว่าจะมีเวอร์ชันอัพเดทที่ปิดช่องโหว่นั้น ซึ่งมีภาษาเรียกว่า Zero-day หมายถึงช่วงเวลาสุญญากาศนับจากวันที่พบช่องโหว่จนถึงวันที่มีเวอร์ชันอัพเดทออกมา ที่แนะนำว่าผู้ที่ใช้ WordPress พึงให้ความใส่ใจก็เพราะว่าหลายเดือนมานี้ (จนกระทั่งถึงวันนี้) WordPress เป็นเป้าในการโจมตีมาตลอด โดยที่เจ้าของเว็บไซต์บางคนอาจจะไม่รู้ด้วยซ้ำ

กลัวอัพเดทแล้วมีปัญหา

สำหรับคนที่ใช้ plugin เยอะอาจจะกลัวการอัพเดทอยู่ไม่น้อย เพราะบางครั้งพออัพเดทไปแล้วกลับใช้ plugin บางตัวไม่ได้ ซึ่งอาจจะเป็นที่ตัว plugin จริงๆหรืออาจจะเป็นสาเหตุอื่นประกอบ ผู้ใช้ก็เลยรอให้ผู้พัฒนา plugin ทดสอบกับเวอร์ชันใหม่ก่อนว่าใช้งานได้จริง ทั้งนี้รวมทั้ง theme ด้วย ปัญหาอันนี้ตอบยากจริงๆ เพราะโดยแง่หลักการ การอัพเดท (update) เวอร์ชันย่อยมักจะไม่มีการเปลี่ยนแปลงคำสั่งใดๆให้กระเทือน plugin หรือ theme เว้นเสียแต่ว่าจะเป็นการอัพเกรด (upgrade) เช่นเปลี่ยนจากเวอร์ชัน 3.5.x ไปเป็นเวอร์ชัน 3.6 ซึ่งก็จะมีการแจ้งล่วงหน้าตลอดว่าจะมีคำสั่งใดที่ล้าสมัย (deplicate) ซึ่งผู้พัฒนา plugin และ theme เขาก็ติดตามเรื่องนี้อยู่ตลอด ความเห็นผมก็คือยังไงก็ต้องอัพเดท ปล่อยไว้ไม่คุ้ม ดังนั้นถ้าใครเคยมีประสบการณ์อัพเดทแล้วใช้ไม่ได้ก็ต้องลองแกะดูว่าปัญหามันเกิดจาก plugin ตัวไหน หรือมีปัญหาอะไรกับ theme ที่ใช้อยู่

ขั้นตอนมาตรฐานก่อนการอัพเดท

การสำรองข้อมูลเป็นวิธีการคลาสสิคสำหรับการอัพเดททุกๆโปรแกรมรวมทั้ง WordPress อย่าไว้ใจระบบการอัพเดทของซอฟต์แวร์ใดๆเป็นอันขาดว่าจะไม่กระทบกับข้อมูลเดิม บางคนเคยอัพเดทมาหลายครั้งโดยไม่ทำการสำรองข้อมูลเพราะขี้เกียจ และทำผ่านมาตลอด แต่พอมันเกิดปัญหาขึ้นมา ก็จะรู้ว่ามันไม่คุ้มกัน

อัพเดท WordPress แบบรวดเร็ว

วีธีนี้สำหรับผู้ที่ใช้ WordPress มาสักระยะหนึ่งคงจะคุ้นเคยดีอยู่แล้ว เพราะในหน้า dashboard จะมีการเตือนให้อัพเดททั้ง plugin และตัว WordPress อยู่เสมอ ซึ่งการอัพเดทก็เพียงแต่กดปุ่ม update แล้วรอก็เป็นอันเสร็จ ซึ่งเป็นวิธีที่ง่ายและสะดวกที่สุด แต่มีข้อระวังก็คือให้ทำในช่วงที่อินเตอร์เนตทำงานลื่นไหลดีนะครับ ถ้าอินเตอร์เนตอืดอยู่อย่าเพิ่งอัพเดทโดยวิธีอัตโนมัตินี้เลย อาจจะทำให้การอัพเดทไม่สมบูรณ์ (บางครั้งแม้ว่า WordPress จะแจ้งว่าการอัพเดทสมบูรณ์แล้วก็ตาม)

การอัพเดทด้วยตัวเอง

การอัพเดทแบบนี้เป็นน้องๆของการติดตั้ง WordPress ใหม่เลย เพราะว่าเราจะทำการอัพโหลดไฟล์ของ WordPress ส่วนใหญ่ขึ้นไปยังเซอร์ฟเวอร์ของเรา ซึ่งการอัพโหลดแบบนี้เป็นแบบที่ช้าแต่ชัวร์และเป็นการเคลียร์พวก malware ที่อาจแฝงอยู่ในระบบไฟล์ของ WordPress พูดง่ายๆคือเราอาจถูกแฮคโดยการวางไฟล์แปลกปลอมเข้าไปในระบบไฟล์ของ WordPress รวมทั้งการเข้าไปแก้ไขบางไฟล์

การอัพเดทแบบนี้ผู้อัพเดทจะต้องมียูสเซอร์เนมและรหัสผ่านของ FTP ของเว็บไซต์ของเรา ซึ่งถ้าหากเราทำคนดียวหมดก็ไม่มีปัญหา เพราะเรารู้อยู่แล้ว แต่ถ้าเป็นบริษัทที่มีการแยกกันดูแลระหว่างผู้ดูระบบ WordPress กับผู้ดูระบบอัพโหลดด้วย FTP ก็ต้องให้คนหลังเป็นคนทำ

ขั้นตอนการอัพเดทด้วยมือ

  1. 1 .สำรองข้อมูลทั้งหมด
  2. 2. Deactivate plugin ทุกตัว
  3. 3. เข้า FTP ดาวน์โหลดโฟลเดอร์ /public_html/wp-content (ทั้งโฟลเดอร์รวมทั้งไฟล์ข้างใน) มาสำรองไว้ และสำรองไฟล์ต่อไปนี้public_html/.htaccess
    public_html/favicon.ico
    public_html/wp-config.php
    public_html/index.html
  4. 4. ใช้ cPanel หรือ DirectAdmin (แล้วแต่โฮสต์ที่ใช้) ลบโฟลเดอร์ /public_html/wp-admin และ/public_html/ wp-includes ทิ้งไป (ซึ่งไฟล์ข้างในก็จะถูกลบไปด้วย) และลบไฟล์อื่นภายใต้ /public_html ออกให้หมด ยกเว้นไฟล์ต่อไปนี้public_html/.htaccess
    public_html/favicon.ico
    public_html/wp-config.php
    public_html/index.htmlซึ่งได้สำรองไว้แล้วในข้อ 3.ห้ามลบโฟลเดอร์ /public_html/wp-content เป็นอันขาด เพราะว่ามันจะเก็บพวกไฟล์รูปภาพ เสียง วีดีโอของโพสต์ของเราเอาไว้ แต่ถ้าเผลอลบไปก็ให้อัพโหลดที่สำรองไว้ คืนกลับไป (นี่คือเหตุผลที่ให้สำรองไว้ก่อน)
  5. 5. แตกไฟล์ wordpress เวอร์ชันใหม่ (3.5.2) แล้วอัพโหลดเฉพาะโฟลเดอร์ wp-admin และ wp-include ไปไว้ภายใต้ public_html
  6. 6. อัพโหลดไฟล์ทุกไฟล์ภายใต้ wordpress ไปยัง public_html ยกเว้น wp-config.php, readme.html, license.txt. wp-config-sample.php
  7. 7. ทำการล็อกอินเข้า WordPress ด้วย mysite.com/wp-admin โปรแกรมจะให้เราอัพเดทฐานข้อมูล
  8. 8. Activate plugin ตามเดิม ก็เป็นอันว่าเสร็จ

โหมดบำรุงรักษา (Maintenance Mode)

คนที่เคยใช้ Drupal คงจะคุ้นเคยกับการอัพเดทโดยเซตให้เว็บไซต์เข้าสู่โหมดบำรุงรักษาก่อน เพื่อที่ว่าถ้าขณะนั้นมีคนเข้ามาดูก็จะแจ้งให้ทราบว่ากำลังปรับปรุง สำหรับ WordPress ไม่มีการเซตโหมดนั้นครับ ถ้าเราใช้วิธีอัพเดทอัตโนมัติ WordPress จะเซตโหมดบำรุงรักษาให้เราโดยอัตโนมัติเช่นกัน ในขณะที่กำลังอัพเดทเมื่อมีคนเข้ามาดูเว็บไซต์เราก็จะขึ้นข้อความว่า

wordpress-maintenance-mode

จนกว่าจะอัพเดทเสร็จ แต่ถ้าเราใช้วิธีอัพเดทเอง (อัตโนมือ) ก็จะไม่มีหน้านี้เกิดขึ้น อ้าวแล้วจะโชว์ error อะไรให้หรือเปล่า?

เมื่อเราลบไฟล์ภายใต้ public_html ออกหมดตามขั้นตอนที่ 4 ก็จะเหลือ index.html เป็นไฟล์เดียวซึ่งจะทำหน้าที่เป็นหน้าแรก ซึ่งจะแสดงเป็นหน้าว่างเปล่า จนกว่าการอัพเดทจะเสร็จสิ้น ซึ่งไฟล์ index.php จะกลับมาทำงานตามปกติ

โหมดบำรุงรักษากับไฟล์ .maintenance

ขอกลับไปเรื่องการอัพเดทแบบอัตโนมัติอีกครั้ง ทันทีที่เราสั่งอัพเดท WordPress สร้างไฟล์ .maintenance ขึ้นที่โฟลเดอร์ public_html ซึ่งเป็นการบอกว่าอยู่ในโหมด maintenance และไฟล์นี้จะถูกลบเมื่อมีการอัพเดทเสร็จ แต่ถ้าหากเกิดข้อผิดพลาดใดๆระหว่างการอัพเดท ไฟล์นี้จะไม่ถูกลบ ทำให้เว็บไซต์ของเราติดอยู่ในโหมด maintenance ตลอดเวลา ซึ่งแก้ได้โดยการเข้าไปลบไฟล์นี้ออก แล้วลองดูว่าเว็บไซต์ใช้งานได้ปกติหรือไม่ มีการอัพเดทเป็นเวอร์ชันใหม่แล้วหรือยัง แต่ถ้าหากเกิดเหตุการณ์นี้ขึ้น แม้ว่าเว็บไซต์ดูเหมือนจะทำงานได้ตามปกติและมีการอัพเดทเป็นเวอร์ชันใหม่แล้ว ก็แนะนำให้ restore ข้อมูล(ที่สำรองไว้ก่อนการอัพเดท) แล้วทำการอัพเดทด้วยมืออีกครั้งจะแน่นอนและปลอดภัยกว่า

Plugin สำหรับโหมดการบำรุงรักษา

ถ้าต้องการอัพเดทแบบมีตัวช่วยก็ต้องใช้ plugin เช่น

http://wordpress.org/extend/plugins/maintenance-mode/

ซึ่งจะช่วยสร้างหน้าบำรุงรักษาสำหรับผู้เข้ามาดูเว็บไซต์ของเรา และมีการเซตอื่นๆได้หลายอย่าง

ถือโอกาสตรวจสอบ malware

ให้เข้า FTP หรือ cPanel, DirectAdmin ตรวจสอบไฟล์ในโฟลเดอร์ wp-content ซึ่งใช้เก็บไฟล์ภาพ เสียง วิดีโอที่เราอัพโหลดขึ้นไปประกอบโพสต์ว่ามีไฟล์ประเภท php หรือพวกสคริปต์ที่รันได้มาปะปนหรือเปล่า ถ้าเจอก็ให้ลบออก (ซึ่งแสดงว่าเราถูกแฮค) การอัพเดทโดยวิธีนี้จะช่วยให้กำจัด malware ที่เกิดจากการถูกแฮคออกจากระบบไฟล์ได้ดีทีสุด เพราะเป็นการล้างระบบ ดีกว่าไปใช้การสแกนหาโค้ดที่แฮคเกอร์ฝังตัวในไฟล์ต่างๆของ WordPress ซึ่งเสียเวลามาก และเป็นการยากสำหรับผู้ใช้ทั่วไปที่จะรู้ว่าโค้ดต่างๆที่ plugin ประเภทสแกนหาโค้ดฝังตัวรายงานออกมานั้นเป็นภัยจริงหรือไม่

แต่การอัพเดทโดยวีธีนี้ช่วยไม่ได้เมื่อโค้ดของแฮกเกอร์ (malicious code) ฝังตัวใน

  1. ฐานข้อมูล ที่ใช้เก็บโพสต์และข้อมูลของ plugin ซึ่งก็ต้องใช้ plugin ที่สแกนหาโค้ดฝังตัวจากฐานข้อมูล
  2. Plugin ที่เราใช้อยู่ ซึ่งถ้าสงสัย plugin ตัวใด วิธีที่ง่ายที่สุดคือ ลบ plugin ตัวนั้น แล้วลงใหม่

สรุปอย่างนี้ครับ

  1. การอัพเดทด้วยตัวเองเป็นวิธีการที่แน่นอนกว่า(แม้จะยุ่งยากและเสียเวลา) สามารถกำจัด malware ที่ฝังอยู่ในระบบไฟล์ของ WordPress ได้ เพราะเป็นการล้างไฟล์เดิมออกทั้งหมด ยกเว้นไฟล์ในโฟลเดอร์ wp-content ซึ่งเราจะต้องตรวจสอบไฟล์แฝงให้ละเอียดด้วยตัวเอง (หรือใช้ plugin ช่วย) แต่ไม่สามารถแก้ปัญหาโค้ดของแฮคเกอร์ที่แฝงตัวอยู่ในฐานข้อมูลได้
  2. การล้างไฟล์แล้วอัพโหลดใหม่ไม่จำเป็นต้องใช้กับการอัพเดทเวอร์ชันของ WordPress หากเราพบว่าเว็บไซต์ของเราถูกแฮคโดยการแฝงไฟล์หรือแฝงโค้ดเข้ามาระบบของ WordPress วีธีการนี้ก็ช่วยได้