ทำไม WordPress ถึงถูกโจมตีบ่อย
WordPress ครองส่วนแบ่งตลาด CMS มากกว่า 43% ของเว็บทั่วโลก ทำให้มันเป็นเป้าหมายอันดับหนึ่งของแฮกเกอร์ ส่วนใหญ่ไม่ได้โจมตีแบบเจาะจง แต่ใช้ bot สแกนหา default URL เช่น /wp-admin และ /wp-login.php แล้ว brute force รหัสผ่าน หรือหาช่องโหว่จาก plugin/theme ที่ไม่อัปเดต
1. เปลี่ยน URL หน้า Login
การเปลี่ยน URL จาก /wp-login.php เป็น URL ที่คาดเดาไม่ได้ ช่วยลด brute force attack ได้ทันทีโดยไม่ต้องทำอะไรมาก ใช้ plugin WPS Hide Login ซึ่งฟรีและตั้งค่าเพียงไม่กี่คลิก
หลังติดตั้งไปที่ Settings > WPS Hide Login แล้วเปลี่ยน Login URL เป็นชื่อที่เดาไม่ได้ เช่น /portal-masuk-2026 บันทึก URL ใหม่ไว้ให้ดีก่อนบันทึกการตั้งค่า
2. ซ่อน WordPress Version
WordPress แสดง version หมายเลขใน meta tag และไฟล์ต่างๆ ทำให้แฮกเกอร์รู้ว่าควรใช้ช่องโหว่ใด เพิ่มโค้ดต่อไปนี้ใน functions.php ของ theme
// ซ่อน WordPress version
remove_action('wp_head', 'wp_generator');
add_filter('the_generator', '__return_empty_string');
// ลบ version จาก CSS/JS
function remove_version_query_strings($src) {
if (strpos($src, 'ver=')) {
$src = remove_query_arg('ver', $src);
}
return $src;
}
add_filter('style_loader_src', 'remove_version_query_strings', 999);
add_filter('script_loader_src', 'remove_version_query_strings', 999);
3. จำกัด Login Attempts
ติดตั้ง plugin Limit Login Attempts Reloaded หรือ Wordfence Security เพื่อ block IP ที่พยายาม login ผิดพลาดหลายครั้ง ตั้งค่าให้ block หลัง 3–5 ครั้ง และ lockout นาน 20–30 นาที
4. เปิดใช้ Two-Factor Authentication (2FA)
2FA คือการยืนยันตัวตน 2 ชั้น แม้รหัสผ่านจะรั่วไหล ผู้ไม่หวังดีก็ยังเข้าไม่ได้โดยไม่มีอุปกรณ์ของคุณ ติดตั้ง plugin WP 2FA หรือ Google Authenticator แล้วสแกน QR code ด้วยแอป Authy หรือ Google Authenticator
5. ปกป้อง wp-config.php และ xmlrpc.php ด้วย .htaccess
เพิ่มโค้ดต่อไปนี้ใน .htaccess ที่ root ของ WordPress
# ปกป้อง wp-config.php
<Files wp-config.php>
order allow,deny
deny from all
</Files>
# Block xmlrpc.php (ป้องกัน DDoS amplification)
<Files xmlrpc.php>
order deny,allow
deny from all
</Files>
# ป้องกันการ browse directory
Options -Indexes
# ปกป้อง .htaccess เอง
<Files .htaccess>
order allow,deny
deny from all
</Files>
6. ตั้งค่า File Permission ที่ถูกต้อง
File permission ที่หละหลวมทำให้แฮกเกอร์แก้ไขไฟล์ได้ ค่าที่ถูกต้องสำหรับ WordPress คือ
- Directories: 755
- Files: 644
- wp-config.php: 600 (เข้มงวดกว่า)
- .htaccess: 644
# ตั้งค่า permission ผ่าน SSH (ถ้ามีสิทธิ์)
find /path/to/wordpress -type d -exec chmod 755 {} \;
find /path/to/wordpress -type f -exec chmod 644 {} \;
chmod 600 /path/to/wordpress/wp-config.php
7. ตรวจสอบไฟล์น่าสงสัย
หากเว็บถูก hack บ่อยครั้งจะมีไฟล์ PHP แปลกๆ ปรากฏขึ้น เช่น ไฟล์ชื่อสุ่มอักขระหรือไฟล์ที่แอบซ่อนใน wp-content/uploads/
# หาไฟล์ PHP ใน uploads (ปกติไม่ควรมี)
find wp-content/uploads -name "*.php" -type f
# หาไฟล์ที่แก้ไขล่าสุดภายใน 7 วัน
find . -name "*.php" -mtime -7 -type f
# ตรวจสอบไฟล์ที่มี eval/base64 ซึ่งเป็นสัญญาณของ malware
grep -r "eval(base64_decode" . --include="*.php" -l
ตรวจสอบว่าการตั้งค่า Security ทำงานถูกต้อง
# ทดสอบว่า wp-config.php เข้าไม่ได้
curl -o /dev/null -w "%{http_code}" https://yoursite.com/wp-config.php
# ผลที่ดี: 403 หรือ 404
# ทดสอบว่า xmlrpc.php ถูกปิด
curl -o /dev/null -w "%{http_code}" https://yoursite.com/xmlrpc.php
# ผลที่ดี: 403
# ตรวจสอบว่า directory browsing ปิด
curl -o /dev/null -w "%{http_code}" https://yoursite.com/wp-content/
# ผลที่ดี: 403
# เช็ค security headers
curl -I https://yoursite.com | grep -iE "x-frame|x-content|strict-transport"
แก้ปัญหาที่พบบ่อย
ล็อกตัวเองออกหลังเปลี่ยน Login URL
ให้เข้า cPanel > File Manager แล้วไปที่โฟลเดอร์ WordPress เปิดไฟล์ wp-config.php เพิ่ม define('WPS_HIDE_LOGIN_URL', 'login'); แล้วเข้าผ่าน yoursite.com/login หรือ deactivate plugin โดยตรงผ่าน phpMyAdmin ใน wp_options table
Wordfence ทำให้เว็บช้าลง
ปิด Wordfence Live Traffic ที่ Dashboard > Wordfence > All Options > General Wordfence Options เพราะฟีเจอร์นี้เขียน database บ่อยมาก และเปลี่ยน scan schedule เป็นรายวันแทนรายชั่วโมง
xmlrpc.php ถูกปิดแล้วแต่แอป Jetpack ใช้ไม่ได้
Jetpack ต้องการ xmlrpc.php ให้เปิดเฉพาะ Jetpack IP แทนการปิดทั้งหมด หรือใช้ Jetpack module ที่รองรับ REST API แทน
2FA ทำให้เข้า admin ไม่ได้เพราะลืม Authenticator
เข้าผ่าน cPanel File Manager แล้ว deactivate plugin โดยการเปลี่ยนชื่อโฟลเดอร์ เช่น wp-2fa เป็น wp-2fa-disabled จากนั้นเข้า admin แล้วตั้งค่า 2FA ใหม่
Error 500 หลังแก้ .htaccess
Syntax ผิดพลาดใน .htaccess ทำให้เกิด 500 ให้เปิด cPanel > File Manager แก้ไข .htaccess ให้ถูกต้อง หรือลบบรรทัดที่เพิ่มเข้าไปล่าสุด
คำถามที่พบบ่อย
ต้องอัปเดต WordPress และ Plugin บ่อยแค่ไหน
อัปเดตทันทีที่มี security patch โดยเฉพาะ update ที่มีคำว่า "security fix" ในชื่อ เปิด automatic update สำหรับ minor version ได้เลย ส่วน major version ให้ทดสอบบน staging ก่อน
Hosting มี Firewall อยู่แล้ว ยังต้องทำ security เพิ่มไหม
ยังต้องทำครับ Hosting Firewall ป้องกันในระดับ network แต่ application-level attack เช่น brute force login หรือ PHP malware ต้องจัดการในระดับ WordPress เอง
SSL Certificate ช่วยป้องกัน Hack ได้ไหม
SSL เข้ารหัส data ระหว่าง browser กับ server แต่ไม่ได้ป้องกันการ hack โดยตรง ยังต้องทำมาตรการอื่นควบคู่กันไป SSL ป้องกัน man-in-the-middle attack ไม่ใช่ brute force หรือ malware
หากต้องการ Hosting ที่มีระบบ Firewall ป้องกัน Brute Force พร้อมใช้งาน ลองดู บริการ hosting จาก asiagb.com รองรับ WordPress และมี security feature ครบครัน