Lỗ hổng bảo mật wp-config.php: tăng cường bảo mật WordPress

Trong lúc wp-config.php đang được mở bằng vi, một bản sao swap (.swp) được tạo ra trong cùng thư mục, và bản sao này từng mở được thẳng qua địa chỉ web. Điều này đã được xác nhận thực tế trên website này vào 2026-09-13, và bản sao đó chứa đầy đủ mật khẩu cơ sở dữ liệu lẫn toàn bộ khóa bảo mật.
Để bảo mật wp-config.php, hãy kiểm tra lần lượt sáu mục dưới đây từ trên xuống.
1️⃣ Chuyện gì xảy ra khi wp-config.php bị lộ
wp-config.php chứa tên cơ sở dữ liệu, tên người dùng và mật khẩu, cùng 8 khóa bảo mật dùng để mã hóa cookie đăng nhập.

Nếu tệp này bị lộ ra ngoài, kẻ tấn công có thể kết nối thẳng vào cơ sở dữ liệu, hoặc dùng khóa bảo mật để giả mạo phiên đăng nhập và chiếm quyền quản trị.
2️⃣ Giới hạn quyền tệp ở mức 600
WordPress thường đặt thư mục ở 755 và tệp ở 644, nhưng wp-config.php được giới hạn ở 600 để chỉ chủ sở hữu mới đọc và ghi được. Đây là lệnh đã chạy trên website thử nghiệm testpilotweb.com.
chmod 600 /home/testpilotweb/www/wp-config.php
stat -c '%a %U' /home/testpilotweb/www/wp-config.php
600 testpilotwebTrên server mà PHP chạy bằng tài khoản khác với chủ sở hữu tệp, nếu đặt 600 thì WordPress không đọc được tệp này và website sẽ không mở được. Trên testpilotweb.com, PHP-FPM chạy bằng cùng tài khoản với chủ sở hữu, nên sau khi đổi, website vẫn mở bình thường.
Với shared hosting không dùng được SSH, hãy đổi sang cùng giá trị đó trong menu phân quyền của chương trình FTP hoặc File Manager của cPanel.
3️⃣ Chặn truy cập ở web server
Nếu không đổi được quyền, hoặc muốn chặn thêm một lớp nữa, hãy để web server từ chối luôn các yêu cầu tới wp-config.php.
🔲 Apache (.htaccess)
<Files wp-config.php>
Require all denied
</Files>[order allow,deny] và [deny from all] thường thấy trong các bài viết cũ là cú pháp của Apache 2.2. Trên Apache 2.4, chúng chỉ hoạt động khi module tương thích (mod_access_compat) được bật.
🔲 nginx
nginx không đọc .htaccess, nên bạn thêm quy tắc [location] vào tệp cấu hình server; website này cũng trả về 403 theo cách tương tự.
location ~* /wp-config(-sample)?\.php$ {
deny all;
}Dấu chấm trong biểu thức chính quy được escape thành [\.]. Nếu để nguyên dấu chấm, cả những địa chỉ bài viết như [/wp-config-php-thiet-lap-co-ban/] cũng bị chặn; website này cũng từng có bài viết trả về 403, không mở được, vì đúng sai sót này.
4️⃣ Chặn tệp tạm của trình soạn thảo và tệp sao lưu
Bản sao [.swp] được tạo ra trong lúc mở tệp bằng vi và bản sao [.bak] để lại trước khi sửa không được chạy như PHP mà bị trả về nguyên dạng văn bản.
nginx chặn cả hai loại này cùng lúc; [444] là mã riêng của nginx, dùng để đóng kết nối mà không gửi phản hồi.
location ~ \.sw[opx]$ { return 444; }
location ~* (\.(bak|orig|old|save)|_ori|\.bak\.[0-9]+)$ { return 444; }5️⃣ Chuyển lên một cấp phía trên web root
WordPress tìm wp-config.php trong thư mục cài đặt trước, nếu không có thì tìm và tải từ thư mục ngay phía trên. Khi chuyển tệp lên một cấp, ra ngoài [public_html], tệp sẽ không còn truy cập được qua địa chỉ web.
Tuy nhiên, nếu thư mục phía trên có [wp-settings.php] của một bản cài WordPress khác, WordPress sẽ không đọc wp-config.php trong thư mục đó. Sau khi di chuyển, hãy kiểm tra ngay website và màn hình quản trị có mở được không.
6️⃣ Vô hiệu hóa chỉnh sửa tệp
Vô hiệu hóa các menu ‘Sửa tệp tin giao diện’ và ‘Sửa tệp tin Plugin’ trong trang quản trị WordPress. Ngay cả khi kẻ tấn công chiếm được quyền quản trị, đây vẫn là một trong những biện pháp phòng thủ mạnh nhất để ngăn việc chèn mã độc qua web.
define('DISALLOW_FILE_EDIT', true); 7️⃣ Xóa wp-config-sample.php
wp-config-sample.php là tệp mẫu dùng khi cài đặt, nên có thể xóa sau khi cài đặt xong. Tệp này không chứa thông tin nhạy cảm, nhưng là tệp kẻ tấn công thường dò tìm theo đường dẫn mặc định, nên không có lý do gì để giữ lại.
Xem bài Thiết lập cơ bản wp-config.php để biết các dòng thực tế trong tệp mẫu và ý nghĩa của từng mục. Nếu không xóa mà giữ lại tệp này, phần [(-sample)?] trong quy tắc nginx ở trên cũng sẽ chặn luôn tệp này.
ℹ️ Thông báo tiếp thị liên kết
Nội dung trên trang này có chứa liên kết affiliate (tiếp thị liên kết). Khi khách truy cập mua sản phẩm hoặc dịch vụ qua các liên kết này, trang sẽ nhận hoa hồng từ bên bán. Trong quá trình đó, số tiền người mua phải trả (sẽ giảm khi có chương trình khuyến mãi ↓) không hề tăng lên. Giá, khuyến mãi và tình trạng hàng được đăng theo thời điểm viết bài và có thể khác với thực tế, vì vậy hãy kiểm tra lại lần cuối với bên bán trước khi mua. Việc chọn và đánh giá sản phẩm dựa trên tiêu chí riêng của trang; việc có nhận hoa hồng hay không không ảnh hưởng đến thứ tự giới thiệu hay nội dung đánh giá.