คำตอบสั้น ๆ: ไล่ตรวจความปลอดภัย WordPress ทีละข้อ ตั้งแต่การอัปเดต บัญชีผู้ใช้ wp-config.php สิทธิ์ไฟล์ ไปจนถึงการป้องกันที่เว็บเซิร์ฟเวอร์และการสำรองข้อมูล
คู่มือนี้อธิบาย WordPress ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
เว็บไซต์ WordPress ส่วนใหญ่ที่ถูกเจาะไม่ได้โดนเพราะช่องโหว่ในตัว WordPress Core แต่เกิดจากปลั๊กอินหรือธีมที่ไม่อัปเดต รหัสผ่านที่เดาง่าย และสิทธิ์ไฟล์ที่เปิดกว้างเกินไป ข่าวดีคือเรื่องเหล่านี้ป้องกันได้ด้วยการตั้งค่าพื้นฐานไม่กี่อย่าง
บทความนี้เป็นเช็กลิสต์ที่ไล่ทำได้ทีละข้อ แบ่งเป็นระดับบัญชีผู้ใช้ ระดับไฟล์ ระดับเว็บเซิร์ฟเวอร์ และการสำรองข้อมูล ข้อไหนมีบทความแยกอธิบายละเอียดแล้วจะใส่ลิงก์ไว้ให้
สิ่งที่ต้องเตรียม
- บัญชี Administrator ของ WordPress
- สิทธิ์เข้าถึงไฟล์เว็บไซต์ผ่าน SSH, SFTP หรือ File Manager ของ Plesk/DirectAdmin
- หากใช้ SSH แนะนำให้ติดตั้ง WP-CLI ไว้ ดู จัดการ WordPress ด้วย WP-CLI
- ไฟล์สำรองของเว็บไซต์และฐานข้อมูลก่อนเริ่มแก้ไขใด ๆ
หมายเหตุ: ก่อนแก้ไฟล์
wp-config.php,.htaccessหรือค่า Nginx ให้สำรองไฟล์เดิมไว้เสมอ ความผิดพลาดเพียงตัวอักษรเดียวในไฟล์เหล่านี้ทำให้เว็บล่มได้ทันที
หมวดที่ 1: อัปเดตและลดสิ่งที่ไม่ใช้
- อัปเดต WordPress Core, ปลั๊กอิน และธีม สม่ำเสมอ ที่หน้า Plugins สามารถคลิก Enable auto-updates ต่อปลั๊กอินที่ไว้ใจได้
- ลบปลั๊กอินและธีมที่ไม่ใช้ ไม่ใช่แค่ปิด (Deactivate) เพราะไฟล์ที่ยังอยู่บนเซิร์ฟเวอร์ยังถูกเรียกตรงได้ เก็บธีมสำรองไว้ 1 ตัว เช่นธีมมาตรฐาน Twenty Twenty-Four หรือรุ่นใหม่กว่า
- ใช้ PHP รุ่นที่ยังได้รับการสนับสนุน PHP ที่หมดอายุการสนับสนุนจะไม่ได้รับแพตช์ความปลอดภัย
- ไม่ติดตั้งปลั๊กอินหรือธีมเถื่อน (Nulled) ซึ่งมักฝังโค้ดอันตรายไว้
ตรวจสอบรายการที่ต้องอัปเดตด้วย WP-CLI
wp core check-update
wp plugin list --update=available
wp theme list --update=available
หากไม่มีอะไรต้องอัปเดต คำสั่งแรกจะแสดง Success: WordPress is at the latest version.
หมวดที่ 2: บัญชีผู้ใช้และการเข้าสู่ระบบ
- ไม่ใช้ชื่อผู้ใช้
adminและใช้รหัสผ่านยาวอย่างน้อย 12 ตัวอักษร เก็บในโปรแกรมจัดการรหัสผ่าน - เปิด Two-Factor Authentication ให้ทุกบัญชีที่เป็น Administrator และ Editor ดู เปิด Two-Factor Authentication สำหรับหน้า Login WordPress
- ให้สิทธิ์น้อยที่สุดที่ทำงานได้ ผู้เขียนบทความใช้บทบาท Author หรือ Editor ไม่จำเป็นต้องเป็น Administrator
- ลบบัญชีที่ไม่ใช้แล้ว เช่น บัญชีของผู้รับจ้างทำเว็บที่จบงานแล้ว
- จำกัดการเดารหัสผ่าน ด้วยปลั๊กอินจำกัดจำนวนครั้งการ Login ผิด หรือป้องกันที่ระดับเว็บเซิร์ฟเวอร์ ดู ป้องกันหน้า Admin ด้วย Basic Auth และ Rate Limit บน Nginx หรือ ตั้งรหัสผ่านป้องกันโฟลเดอร์บน Plesk
ดูรายชื่อ Administrator ทั้งหมดเพื่อหาบัญชีแปลกปลอม
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered
หากพบบัญชีที่ไม่รู้จัก ให้ถือว่าเว็บอาจถูกเจาะแล้ว และทำตาม เว็บ WordPress โดนแฮก: ขั้นตอนตรวจสอบและกู้คืน
หมวดที่ 3: ตั้งค่าใน wp-config.php
เพิ่มบรรทัดต่อไปนี้ใน wp-config.php ก่อนบรรทัด /* That's all, stop editing! Happy publishing. */
// ปิดตัวแก้ไขไฟล์ธีมและปลั๊กอินในหลังบ้าน
define( 'DISALLOW_FILE_EDIT', true );
// บังคับหลังบ้านใช้ HTTPS
define( 'FORCE_SSL_ADMIN', true );
// ไม่แสดง Error บนหน้าเว็บ
define( 'WP_DEBUG', false );
DISALLOW_FILE_EDIT สำคัญมาก เพราะหากผู้ไม่หวังดีได้บัญชี Administrator ไป เมนูแก้ไขไฟล์ธีม (Theme File Editor) คือช่องทางวางโค้ดอันตรายที่ง่ายที่สุด
หากสงสัยว่ารหัสผ่านหรือ Cookie รั่ว ให้เปลี่ยน Security Keys (Salts) ใหม่ ผู้ใช้ทุกคนจะถูกบังคับออกจากระบบ
wp config shuffle-salts
หรือเปิด https://api.wordpress.org/secret-key/1.1/salt/ แล้วนำค่าที่ได้ไปแทนบรรทัด AUTH_KEY ถึง NONCE_SALT เดิมใน wp-config.php
หมวดที่ 4: สิทธิ์ไฟล์และความเป็นเจ้าของ
ค่าที่แนะนำบนเซิร์ฟเวอร์ Linux คือโฟลเดอร์ 755 ไฟล์ 644 และ wp-config.php เป็น 640 หรือ 600 ไม่ควรมีไฟล์ใดเป็น 777 ตัวอย่างนี้ถือว่าเว็บอยู่ที่ /var/www/example.com และเจ้าของไฟล์คือผู้ใช้ www-data ของ Ubuntu (บน AlmaLinux/Rocky มักเป็น nginx หรือ apache และบน Plesk/DirectAdmin จะเป็นผู้ใช้ของโดเมนนั้น)
cd /var/www/example.com
sudo find . -type d -exec chmod 755 {} \;
sudo find . -type f -exec chmod 644 {} \;
sudo chmod 640 wp-config.php
sudo chown -R www-data:www-data .
บน Plesk และ DirectAdmin ห้ามเปลี่ยนเจ้าของไฟล์เป็น www-data เพราะแต่ละโดเมนรันด้วยผู้ใช้ของตัวเอง ให้ปรับเฉพาะ chmod เท่านั้น อ่านเพิ่มเติมที่ ทำความเข้าใจสิทธิ์ไฟล์บน Linux ด้วย chmod และ chown