
สรุปคำตอบ
เคสนี้เป็นเว็บร้านค้าออนไลน์ที่ใช้ Plugin สร้างฟอร์มซึ่งไม่ได้อัปเดตมากกว่า 2 ปีและมีช่องโหว่ File Upload แฮกเกอร์ใช้บอทอัปโหลด Web Shell เข้าโฟลเดอร์ wp-content/uploads/ แล้วฝัง Malware ทั่วระบบ จนเว็บ redirect ไปเว็บโฆษณาและ Google ขึ้นบัญชีดำ การแก้ไขคือปิดเว็บชั่วคราว สแกนพบไฟล์ผิดปกติกว่า 40 ไฟล์ ลบ Plugin ต้นเหตุ ติดตั้ง Core ใหม่ ล้าง Database เปลี่ยนรหัสผ่านทุกจุด แล้วยื่น Review Request ผลคือใช้เวลาแก้ 6 ชั่วโมง และถูกถอดจากบัญชีดำภายใน 48 ชั่วโมงหลังยื่น review
หมายเหตุ: บทความนี้เป็นตัวอย่างสถานการณ์ที่รวบรวมจากรูปแบบปัญหาที่พบบ่อย ไม่ใช่บันทึกงานของลูกค้ารายใดรายหนึ่ง ตัวเลขและระยะเวลาในบทความใช้เพื่ออธิบายขั้นตอนเท่านั้น
Plugin เก่าที่ไม่ได้อัปเดตมานานคืองหนึ่งในช่องโหว่ที่ถูกโจมตีบ่อยที่สุดในระบบ WordPress เคสนี้เกิดขึ้นกับเว็บไซต์ร้านค้าออนไลน์รายหนึ่ง ที่ใช้ plugin สร้างฟอร์มรุ่นเก่าซึ่งมีช่องโหว่ File Upload แฮกเกอร์ใช้ช่องโหว่นี้ฝัง Web Shell และ Malware เข้าไปในเซิร์ฟเวอร์โดยที่เจ้าของเว็บไม่รู้ตัวนานหลายสัปดาห์ ก่อนที่ Google จะแจ้งเตือนว่าเว็บถูกขึ้นบัญชีดำ
อาการที่เจ้าของเว็บสังเกตเห็น
ในกรณีนี้ เจ้าของเว็บรับรู้ปัญหาครั้งแรกจากอีเมลแจ้งเตือนของ Google Search Console ที่บอกว่าเว็บมี “Harmful content” ตามด้วยอาการต่อไปนี้:
- เบราว์เซอร์แสดงคำเตือนสีแดง “This site may harm your computer” ก่อนเข้าเว็บ
- ผู้เยี่ยมชมบางส่วนถูก redirect ไปยังเว็บโฆษณาแปลก ๆ โดยอัตโนมัติ
- ความเร็วเว็บช้าลงผิดปกติ เพราะเซิร์ฟเวอร์ถูกใช้ส่ง spam email
- พบไฟล์ .php ชื่อแปลก ๆ ในโฟลเดอร์
wp-content/uploads/ - Hosting provider ส่งอีเมลเตือนว่าบัญชีถูก suspend เนื่องจาก malicious activity
หากเว็บของคุณมีอาการติดมัลแวร์ WordPress เหล่านี้ ควรดำเนินการตรวจสอบทันทีโดยไม่รอช้า

สาเหตุ: Plugin เก่าที่ไม่ได้รับการดูแล
เมื่อเข้าตรวจสอบ พบว่า plugin สร้างฟอร์มที่ใช้งานอยู่ไม่ได้รับการอัปเดตมากกว่า 2 ปี เวอร์ชันดังกล่าวมีช่องโหว่ที่บันทึกไว้ใน CVE (Common Vulnerabilities and Exposures) ซึ่งอนุญาตให้ผู้ไม่ได้รับอนุญาตอัปโหลดไฟล์ขึ้นเซิร์ฟเวอร์ได้โดยตรง แฮกเกอร์ใช้สคริปต์อัตโนมัติสแกนหาเว็บที่ใช้ plugin รุ่นนั้น แล้วอัปโหลด Web Shell (ไฟล์ PHP ที่ทำหน้าที่เหมือนประตูหลัง) เข้าไปในโฟลเดอร์ uploads จากนั้นจึงฝัง malware เพิ่มเติมทั่วทั้งระบบไฟล์
ขั้นตอนการแก้ไขที่ใช้จริง
การกำจัด malware ที่ฝังรากลึกแบบนี้ต้องทำอย่างเป็นระบบ ไม่ใช่แค่ลบไฟล์ที่สังเกตเห็น:
- ขั้นที่ 1 — ปิดเว็บชั่วคราว: เปิด Maintenance Mode หรือปิด public access ก่อน เพื่อป้องกันผู้เยี่ยมชมได้รับอันตรายระหว่างทำความสะอาด
- ขั้นที่ 2 — สำรองข้อมูลสถานะปัจจุบัน: แม้จะติด malware ก็ยังควรสำรองข้อมูลไว้ก่อน เพื่อใช้อ้างอิงเปรียบเทียบ
- ขั้นที่ 3 — สแกนไฟล์ทั้งหมด: ใช้เครื่องมืออย่าง Wordfence, MalCare หรือ Sucuri Scanner เพื่อระบุไฟล์ที่ถูกแก้ไขหรือเป็นอันตราย โดยเคสนี้พบไฟล์ผิดปกติกว่า 40 ไฟล์กระจายอยู่ใน
wp-content/uploads/,wp-includes/และwp-admin/ - ขั้นที่ 4 — ลบ plugin ที่มีช่องโหว่: ปิดใช้งานและลบ plugin ที่เป็นต้นเหตุทันที ยังไม่ต้องอัปเดต เพราะไฟล์ใน plugin อาจถูกแทรก malware ไปแล้ว
- ขั้นที่ 5 — ทำความสะอาดไฟล์ core WordPress: ติดตั้ง WordPress ใหม่ทับ (fresh reinstall) โดยไม่แตะโฟลเดอร์
wp-contentเพื่อให้ไฟล์ core สะอาด - ขั้นที่ 6 — ตรวจ database: ค้นหาโค้ด base64 หรือ JavaScript แปลกปลอมที่ถูกฝังในตาราง
wp_optionsและwp_postsด้วยคำสั่ง SQL เช่นSELECT * FROM wp_options WHERE option_value LIKE '%eval(%' - ขั้นที่ 7 — เปลี่ยน credentials ทั้งหมด: รีเซ็ต password ของ WordPress admin ทุกบัญชี, FTP/SFTP, cPanel และ database
- ขั้นที่ 8 — ขอถอดออกจากบัญชีดำ: ยื่น Review Request ใน Google Search Console หลังจากทำความสะอาดเสร็จสมบูรณ์

วิธีป้องกันไม่ให้เกิดซ้ำ
หลังแก้ไขปัญหา ควรปรับปรุงระบบความปลอดภัยตาม checklist ความปลอดภัย WordPress ดังนี้:
- อัปเดต plugin และ theme ทุกตัวเป็นประจำ อย่างน้อยสัปดาห์ละครั้ง หรือเปิด auto-update สำหรับ security patch
- ลบ plugin ที่ไม่ได้ใช้งานออก plugin ที่ปิดใช้งานแต่ยังอยู่ในเซิร์ฟเวอร์ยังคงเป็นช่องโหว่ได้
- จำกัดสิทธิ์โฟลเดอร์ uploads: ตั้ง permission ของ
wp-content/uploads/เป็น 755 และป้องกันการรัน PHP ในโฟลเดอร์นั้นด้วยไฟล์.htaccessที่มีphp_flag engine off - ติดตั้ง Security Plugin เช่น Wordfence หรือ Sucuri ที่มีระบบ firewall และ malware scanning อัตโนมัติ
- ใช้ Web Application Firewall (WAF) ระดับ DNS เช่น Cloudflare เพื่อกรองทราฟฟิกอันตรายก่อนถึงเซิร์ฟเวอร์
- สำรองข้อมูลอัตโนมัติ อย่างน้อยวันละครั้ง พร้อมเก็บสำเนาไว้นอกเซิร์ฟเวอร์ (off-site backup)
เมื่อไหร่ควรเรียกผู้เชี่ยวชาญ
การทำความสะอาด malware ด้วยตัวเองมีความเสี่ยงที่จะกำจัดได้ไม่หมด เพราะ malware หลายชนิดสร้าง backdoor ซ่อนไว้หลายจุดพร้อมกัน ควรติดต่อบริการล้างไวรัส WordPress ของผู้เชี่ยวชาญเมื่อ:
- ทำความสะอาดแล้วแต่เว็บยังถูกแจ้งเตือนซ้ำภายในไม่กี่วัน (malware reinfection)
- ไม่แน่ใจว่ากำจัดได้ครบหรือยัง หรือไม่มีสิทธิ์เข้าถึงระดับ server
- Hosting provider ล็อกบัญชีหรือระงับการใช้งานและต้องการหลักฐานว่าเว็บสะอาดแล้ว
- เว็บเป็น e-commerce ที่มีข้อมูลลูกค้าหรือการชำระเงิน ซึ่งต้องการความมั่นใจ 100%
เคสนี้ใช้เวลาแก้ไขรวม 6 ชั่วโมง และเว็บกลับมาออนไลน์พร้อมถอดออกจากบัญชีดำของ Google ภายใน 48 ชั่วโมงหลังยื่น review อย่างไรก็ตาม หากเคสนี้ถูกปล่อยทิ้งไว้นานกว่านี้ ความเสียหายต่อ SEO และความเชื่อมั่นของลูกค้าจะรุนแรงกว่านี้มาก สำหรับเจ้าของเว็บที่กังวลเรื่องความปลอดภัย สามารถดูบทความเกี่ยวกับเคสเว็บโดน redirect ไปเว็บพนันเพื่อเปรียบเทียบรูปแบบการโจมตีที่ใช้เทคนิคคล้ายกัน
คำถามที่พบบ่อย
Plugin ที่ปิดการใช้งานแต่ยังไม่ลบออก ยังเป็นช่องโหว่ได้ไหม?
ได้ครับ แม้ plugin จะถูกปิดการใช้งาน แต่ไฟล์ยังอยู่บนเซิร์ฟเวอร์และยังสามารถถูกเข้าถึงได้โดยตรงผ่าน URL ควรลบ plugin ที่ไม่ได้ใช้งานออกให้หมด
ถ้าสแกนด้วย plugin security แล้วไม่พบอะไร แสดงว่าเว็บปลอดภัยแน่นอนไหม?
ไม่จำเป็นครับ malware บางชนิดออกแบบมาเพื่อหลบการตรวจจับของ plugin สแกนทั่วไป การตรวจสอบระดับ server โดยผู้เชี่ยวชาญจะให้ความมั่นใจมากกว่า
หลังทำความสะอาด malware แล้ว Google จะถอดเว็บออกจากบัญชีดำให้เองอัตโนมัติไหม?
ไม่ครับ ต้องยื่น Review Request ใน Google Search Console ด้วยตัวเอง หลังจากนั้น Google จะใช้เวลาประมาณ 1–3 วันทำการในการตรวจสอบและถอดออกจากบัญชีดำ
ราคาค่าจ้างล้าง malware WordPress โดยทั่วไปอยู่ที่เท่าไหร่?
ขึ้นอยู่กับความรุนแรงของการติดเชื้อและขนาดเว็บ บริการล้างไวรัส/มัลแวร์ของ WP Doctor Thailand เริ่มต้น 3,500 บาท รับประกันงานสูงสุด 180 วัน และถ้าแก้ไม่สำเร็จคืนเงินเต็มจำนวน ทั้งนี้ค่าใช้จ่ายในการป้องกันตั้งแต่แรกถูกกว่าการแก้ไขหลังติดเชื้อเสมอ
Web Shell คืออะไร?
Web Shell คือไฟล์ PHP ที่แฮกเกอร์อัปโหลดเข้าเซิร์ฟเวอร์เพื่อใช้เป็นประตูหลัง (Backdoor) สั่งงานเว็บจากระยะไกล เช่น ฝัง Malware เพิ่ม แก้ไฟล์ หรือส่ง Spam มักซ่อนอยู่ในโฟลเดอร์ที่ไม่ควรมีไฟล์ .php อย่าง wp-content/uploads/
จะป้องกันไม่ให้รันไฟล์ PHP ในโฟลเดอร์ uploads ได้อย่างไร?
ตั้ง Permission ของ wp-content/uploads/ เป็น 755 และวางไฟล์ .htaccess ในโฟลเดอร์นั้นเพื่อปิดการทำงานของ PHP เช่น php_flag engine off แม้ Web Shell จะถูกอัปโหลดเข้ามาก็จะรันไม่ได้
