1. Tấn công brute force (đoán mật khẩu)
Đây là kiểu tấn công đơn giản nhưng phổ biến nhất: hacker dùng bot để thử hàng nghìn tổ hợp username/password vào trang /wp-login.php hoặc /xmlrpc.php.
Dấu hiệu:
- Log server có hàng trăm request đến
/wp-login.phpmỗi phút. - Tăng đột biến CPU và memory do PHP phải xử lý request liên tục.
Phòng thủ:
- Đổi URL đăng nhập mặc định bằng plugin hoặc rewrite (ví dụ
/login-admin). - Giới hạn số lần đăng nhập sai – plugin:
Limit Login Attempts ReloadedhoặcWP Cerber. - Tắt hoặc giới hạn truy cập
/xmlrpc.phpnếu không dùng Jetpack hay app mobile. - Dùng xác thực hai lớp (2FA) cho tài khoản admin.
- Chặn brute force ở tầng server (Fail2ban, Cloudflare Firewall).
2. Tấn công qua plugin hoặc theme lỗi bảo mật
Nhiều plugin hoặc theme cũ chứa lỗ hổng như SQL Injection, XSS, hoặc file upload không được kiểm soát. Hacker lợi dụng điều này để chiếm quyền, chèn mã độc, hoặc tải shell lên server.
Dấu hiệu:
- Các file PHP lạ xuất hiện trong
wp-content/uploads/hoặcwp-includes/. - Trang web bị chuyển hướng ngẫu nhiên hoặc hiển thị popup quảng cáo.
Phòng thủ:
- Chỉ cài plugin và theme từ nguồn tin cậy (WordPress.org hoặc nhà phát triển uy tín).
- Luôn cập nhật plugin/theme và xóa những cái không còn dùng.
- Phân quyền file đúng chuẩn:
- File:
644 - Thư mục:
755 - Không bao giờ để
777.
- File:
- Sử dụng công cụ quét bảo mật định kỳ:
Wordfence,WPScan, hoặcSolid Security.
3. Tấn công XSS (Cross-Site Scripting)
XSS cho phép hacker chèn JavaScript độc hại vào website – thường qua form, comment, hoặc input chưa được lọc kỹ. Khi người dùng khác truy cập, script đó có thể đánh cắp cookie, session hoặc thực thi hành vi trái phép.
Phòng thủ:
- Luôn sử dụng
esc_html(),esc_attr(),wp_kses()khi hiển thị dữ liệu do người dùng nhập. - Bật header bảo mật:
header('X-XSS-Protection: 1; mode=block'); header('Content-Security-Policy: default-src self'); - Kiểm tra kỹ các form comment, contact form, search box – đây là nơi dễ bị XSS nhất.
4. SQL Injection
Khi dữ liệu người dùng được chèn trực tiếp vào query SQL mà không escape, hacker có thể thao túng truy vấn để lấy dữ liệu hoặc ghi vào database.
Ví dụ lỗi:
$sql = "SELECT * FROM wp_users WHERE user_login = '{$_GET['user']}'";
Phòng thủ đúng cách:
$prepared = $wpdb->prepare(
"SELECT * FROM wp_users WHERE user_login = %s",
$_GET['user']
);
$wpdb->get_results($prepared);
WordPress có sẵn lớp $wpdb và hàm prepare() để tránh SQL Injection – tuyệt đối không dùng string nối thủ công trong query.
5. File Upload và Remote Code Execution
Hacker có thể tải file PHP ngụy trang dưới dạng hình ảnh (ví dụ shell.php.jpg) thông qua form upload của plugin hoặc theme lỗi bảo mật, sau đó truy cập file để thực thi code từ xa.
Phòng thủ:
- Kiểm tra định dạng file trước khi upload: chỉ cho phép
jpg,png,pdf. - Đổi tên file sau khi upload, loại bỏ phần mở rộng nguy hiểm.
- Cấm thực thi PHP trong thư mục upload bằng .htaccess:
<FilesMatch "\.php$">
Deny from all
</FilesMatch>
6. Tấn công qua REST API
WordPress REST API giúp plugin và frontend tương tác với backend, nhưng nếu không kiểm soát quyền (permission callback) chặt chẽ, hacker có thể gửi request trực tiếp để chỉnh sửa dữ liệu hoặc dò thông tin user.
Phòng thủ:
-
- Luôn thêm
'permission_callback'vào khi đăng ký endpoint:
- Luôn thêm
register_rest_route('myplugin/v1', '/data', [
'methods' => 'GET',
'callback' => 'myplugin_get_data',
'permission_callback' => function () {
return current_user_can('manage_options');
}
]);
- Tắt REST API với user chưa đăng nhập nếu không cần public API.
- Dùng plugin như
Disable REST APIhoặc tự filter theo role.
7. Cross-Site Request Forgery (CSRF)
CSRF xảy ra khi hacker lừa người dùng admin click vào link hoặc gửi form giả mạo, từ đó thực thi hành động trái phép (xóa bài, đổi email, cài plugin).
Phòng thủ:
- Luôn dùng
wp_nonce_field()và kiểm tra bằngcheck_admin_referer()trong form admin. - Kiểm tra quyền user bằng
current_user_can()trước khi thực thi action quan trọng. - Không cho phép GET request thực hiện hành động ghi dữ liệu (chỉ dùng POST).
8. Cấu hình bảo mật production
Ngay cả khi code an toàn, cấu hình sai cũng khiến WordPress dễ bị tấn công. Dưới đây là các cấu hình nên áp dụng trong production:
- Tắt hiển thị lỗi PHP:
define('WP_DEBUG', false); define('WP_DEBUG_DISPLAY', false); - Ẩn phiên bản WordPress:
remove_action('wp_head', 'wp_generator'); - Đổi prefix bảng database (tránh mặc định
wp_). - Chỉ cho phép ghi file với user web server cần thiết (www-data, nginx).
- Dùng HTTPS bắt buộc và header bảo mật (HSTS, CSP, X-Frame-Options).
- Thiết lập tường lửa ứng dụng (WAF) ở tầng Cloudflare hoặc server.
9. Giám sát và phản ứng
Bảo mật không phải là cấu hình một lần. Bạn cần giám sát liên tục:
- Sử dụng plugin giám sát:
Wordfence,Sucuri Security. - Thiết lập alert email khi file bị thay đổi hoặc plugin bị chỉnh sửa.
- Giữ backup hàng ngày và lưu bản backup ngoài server (Google Cloud, Dropbox, S3).
- Dùng công cụ CLI
wp scanhoặc dịch vụ WPScan.com để phát hiện lỗ hổng plugin.
Kết luận
WordPress không kém an toàn như nhiều người nghĩ — vấn đề nằm ở việc cấu hình, cập nhật, và giám sát. Hiểu rõ các kiểu tấn công phổ biến và áp dụng biện pháp phòng thủ ở cả cấp code lẫn hệ thống là cách duy trì website an toàn, ổn định và sẵn sàng cho môi trường production.
Bình luận