ช่องโหว่ความปลอดภัย wp-config.php: เสริมความปลอดภัย WordPress

ประกาศแอฟฟิลิเอต Ver 3.1
ประกาศแอฟฟิลิเอต Ver 3.2 (เฉพาะมือถือ)

ระหว่างที่เปิด wp-config.php ค้างไว้ใน vi สำเนา swap (.swp) ที่เกิดในโฟลเดอร์เดียวกันเคยเปิดได้ตรงๆ จาก URL เรื่องนี้ตรวจพบจริงบนเว็บไซต์นี้เมื่อ 2026-09-13 และในสำเนานั้นมีทั้งรหัสผ่านฐานข้อมูลและคีย์ความปลอดภัยครบทุกตัว

ตรวจความปลอดภัยของ wp-config.php ตาม 6 ข้อด้านล่าง โดยไล่จากบนลงล่างตามลำดับ

1️⃣ สิ่งที่เกิดขึ้นเมื่อ wp-config.php ถูกเปิดเผย

ใน wp-config.php มีชื่อฐานข้อมูล·ผู้ใช้·รหัสผ่าน และคีย์ความปลอดภัย 8 ตัวที่ใช้เข้ารหัสคุกกี้ล็อกอิน

ไฟล์ wp-config.php ของ WordPress

ถ้าไฟล์นี้ถูกเปิดเผยออกสู่ภายนอก ผู้โจมตีจะเชื่อมต่อฐานข้อมูลได้โดยตรง หรือใช้คีย์ความปลอดภัยปลอมเซสชันล็อกอินเพื่อยึดสิทธิ์ผู้ดูแลไปได้

2️⃣ จำกัดสิทธิ์ไฟล์เป็น 600

โดยทั่วไป WordPress ตั้งโฟลเดอร์เป็น 755 และไฟล์เป็น 644 แต่ wp-config.php ให้จำกัดไว้ที่ 600 ซึ่งมีเพียงเจ้าของที่อ่านและเขียนได้ ด้านล่างคือคำสั่งที่รันบนเว็บไซต์ทดสอบ testpilotweb.com

chmod 600 /home/testpilotweb/www/wp-config.php
stat -c '%a %U' /home/testpilotweb/www/wp-config.php
600 testpilotweb

บนเซิร์ฟเวอร์ที่ PHP ทำงานด้วยบัญชีอื่นที่ไม่ใช่เจ้าของไฟล์ ถ้าตั้งเป็น 600 WordPress จะอ่านไฟล์นี้ไม่ได้และเว็บไซต์จะเปิดไม่ขึ้น ส่วน testpilotweb.com ใช้ PHP-FPM ที่ทำงานด้วยบัญชีเดียวกับเจ้าของ หลังเปลี่ยนแล้วจึงยังเปิดได้ตามปกติ

สำหรับแชร์โฮสติ้งที่ใช้ SSH ไม่ได้ ให้เปลี่ยนเป็นค่าเดียวกันจากเมนูสิทธิ์ในโปรแกรม FTP หรือ File Manager ของ cPanel

3️⃣ บล็อกการเข้าถึงที่เว็บเซิร์ฟเวอร์

ถ้าเปลี่ยนสิทธิ์ไม่ได้ หรืออยากป้องกันเพิ่มอีกชั้น ให้เว็บเซิร์ฟเวอร์ปฏิเสธคำขอ wp-config.php ไปเลย

🔲 Apache (.htaccess)

<Files wp-config.php>
    Require all denied
</Files>

[order allow,deny]·[deny from all] ที่มักเห็นในบทความเก่าเป็นไวยากรณ์ของ Apache 2.2 ส่วนใน Apache 2.4 จะทำงานได้เฉพาะเมื่อเปิดโมดูลความเข้ากันได้ (mod_access_compat) ไว้

🔲 nginx

nginx ไม่อ่าน .htaccess จึงต้องใส่กฎ [location] ในไฟล์ตั้งค่าเซิร์ฟเวอร์ เว็บไซต์นี้ก็ส่งกลับ 403 ด้วยวิธีเดียวกัน

location ~* /wp-config(-sample)?\.php$ {
    deny all;
}

ใน Regex ต้อง escape จุดเป็น [\.] ถ้าปล่อยจุดไว้ตามเดิม URL บทความอย่าง [/wp-config-php-ตั้งค่าพื้นฐาน/] ก็จะถูกบล็อกไปด้วย เว็บไซต์นี้เองก็เคยพลาดแบบเดียวกันจนบทความเปิดไม่ได้และขึ้น 403

4️⃣ บล็อกไฟล์ชั่วคราวของโปรแกรมแก้ไข·ไฟล์สำรอง

สำเนา [.swp] ที่เกิดขึ้นระหว่างเปิดไฟล์ค้างไว้ใน vi และสำเนา [.bak] ที่เก็บไว้ก่อนแก้ไข จะไม่ถูกรันเป็น PHP แต่จะถูกส่งออกไปเป็นข้อความธรรมดาตามที่เขียนไว้

ใช้ nginx ตัดทั้งสองแบบไปพร้อมกัน ส่วน [444] คือโค้ดเฉพาะของ nginx ที่ปิดการเชื่อมต่อโดยไม่ส่งการตอบกลับ

location ~ \.sw[opx]$ { return 444; }
location ~* (\.(bak|orig|old|save)|_ori|\.bak\.[0-9]+)$ { return 444; }

5️⃣ ย้ายไฟล์ขึ้นไปเหนือเว็บรูทหนึ่งระดับ

WordPress จะหา wp-config.php ในโฟลเดอร์ที่ติดตั้งก่อน ถ้าไม่มีจะหาในโฟลเดอร์ที่อยู่ถัดขึ้นไปแล้วโหลดมาใช้ ถ้าย้ายไฟล์ออกไปไว้นอก [public_html] ขึ้นไปหนึ่งระดับ ก็จะเข้าถึงผ่าน URL ไม่ได้

แต่ถ้าโฟลเดอร์ด้านบนมี [wp-settings.php] ของ WordPress อีกชุดอยู่ WordPress จะไม่อ่าน wp-config.php ในโฟลเดอร์นั้น หลังย้ายแล้วให้ตรวจทันทีว่าเว็บไซต์และหน้าจอผู้ดูแลยังเปิดได้

6️⃣ ปิดใช้งานการแก้ไขไฟล์

ปิดใช้งานเมนู ‘Theme File Editor’ และ ‘Plugin File Editor’ ในแผงควบคุม WordPress แม้ผู้โจมตีจะยึดสิทธิ์ผู้ดูแลไปได้ วิธีนี้ก็เป็นหนึ่งในวิธีป้องกันที่แข็งแกร่งที่สุดที่กันไม่ให้ฝังมัลแวร์ผ่านเว็บ

define('DISALLOW_FILE_EDIT', true);	

7️⃣ ลบ wp-config-sample.php

wp-config-sample.php เป็นไฟล์ตัวอย่างที่ใช้ตอนติดตั้ง เมื่อติดตั้งเสร็จแล้วจึงลบได้ แม้จะไม่มีข้อมูลที่อ่อนไหว แต่เป็นไฟล์ที่ผู้โจมตีลองหาตามพาธเริ่มต้น จึงไม่มีเหตุผลต้องเก็บไว้

บรรทัดจริงของไฟล์ตัวอย่างและความหมายของแต่ละรายการ สรุปไว้ในบทความ ตั้งค่าพื้นฐาน wp-config.php แล้ว ถ้าเก็บไฟล์ไว้โดยไม่ลบ ส่วน [(-sample)?] ในกฎ nginx ด้านบนก็จะบล็อกไฟล์นี้ไปด้วย

WordPress Box

ℹ️ ประกาศเรื่องลิงก์แอฟฟิลิเอต
เนื้อหาของเว็บไซต์นี้มีลิงก์แอฟฟิลิเอต หากผู้เข้าชมซื้อสินค้าหรือบริการผ่านลิงก์เหล่านี้ เว็บไซต์นี้จะได้รับค่าคอมมิชชันจากผู้ขาย ในกระบวนการนี้ ราคาที่ผู้ซื้อจ่าย(ราคาจะลดลงเมื่อมีโปรโมชัน↓)จะไม่สูงขึ้นแต่อย่างใด ราคา ส่วนลด และข้อมูลสต็อกที่แสดงเป็นข้อมูล ณ เวลาที่เขียนและอาจต่างจากความเป็นจริง โปรดตรวจสอบกับผู้ขายอีกครั้งก่อนซื้อ การเลือกและการประเมินสินค้าเขียนตามเกณฑ์ของเราเอง และการได้รับค่าคอมมิชชันหรือไม่ไม่มีผลต่อลำดับการแนะนำหรือเนื้อหาการประเมิน

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

Prove your humanity: 2   +   10   =