
Website WordPress bị nhiễm mã độc là tình huống không hiếm gặp — đặc biệt với các site sử dụng theme/plugin lậu (nulled), mật khẩu yếu hoặc bỏ qua cập nhật bảo mật quá lâu. Hậu quả có thể rất nghiêm trọng: Google đánh dấu website là nguy hiểm, hosting bị khóa, dữ liệu khách hàng bị đánh cắp, hoặc server bị dùng để gửi spam.
Bài viết này hướng dẫn quy trình xử lý triệt để virus trên WordPress theo thứ tự ưu tiên — từ cách dọn sạch mã nguồn, reinstall core, tắt XMLRPC, cài lại plugin sạch, cho đến các biện pháp bảo mật dài hạn để không bị tái nhiễm.
Lưu ý: Trước khi thực hiện bất kỳ bước nào, hãy sao lưu toàn bộ dữ liệu (database + file) dù site đang bị nhiễm. Bạn cần bản backup này nếu cần khôi phục dữ liệu sau.
Bước 1: Cô Lập Website — Ngắt Không Cho Virus Lây Lan
Việc đầu tiên là hạn chế thiệt hại đang xảy ra.
- Đặt website ở chế độ Maintenance hoặc tạm thời tắt public access nếu hosting hỗ trợ (thông qua
.htaccesshoặc tính năng của cPanel). - Đổi mật khẩu ngay lập tức: mật khẩu WordPress admin, FTP/SFTP, cPanel/Plesk, email hosting.
- Thu hồi tất cả session đang đăng nhập: Vào
wp-admin → Users → [tài khoản của bạn], kéo xuống mục Sessions, chọn Log Out Everywhere Else. - Thông báo cho nhà cung cấp hosting để họ kiểm tra server-level và có thể giúp cô lập các file độc hại.

Bước 2: Quét Mã Độc — Xác Định Phạm Vi Bị Nhiễm
Trước khi xóa, cần biết virus ở đâu.
Dùng công cụ quét online
- Sucuri SiteCheck (sitecheck.sucuri.net) — kiểm tra blacklist và phát hiện mã độc phía frontend.
- VirusTotal — upload các file nghi ngờ để quét bằng 70+ engine.
Dùng plugin quét trên WordPress (nếu vẫn vào được wp-admin)
- Wordfence Security — quét toàn bộ file, so sánh với repository WordPress.org, phát hiện file bị sửa đổi.
- MalCare — phát hiện mã độc ẩn sâu mà Wordfence có thể bỏ qua.
Kiểm tra thủ công qua FTP/SSH
Tìm các dấu hiệu phổ biến của mã độc:
bash
# Tìm file PHP chứa các hàm mã hóa độc hại
grep -r "eval(base64_decode" /public_html/ --include="*.php"
grep -r "gzinflate" /public_html/ --include="*.php"
grep -r "str_rot13" /public_html/ --include="*.php"
# Tìm file PHP mới được tạo/sửa trong 30 ngày gần nhất
find /public_html/ -name "*.php" -mtime -30
Đây là các hàm PHP thường được mã độc sử dụng để ẩn mình:
eval(base64_decode(...))gzinflate/gzuncompressstr_rot13preg_replacevới flag/e
Bước 3: Xóa Toàn Bộ Mã Nguồn Core — Giữ Lại wp-content
Đây là bước quan trọng nhất để đảm bảo core WordPress hoàn toàn sạch.

Những gì cần XÓA
Kết nối FTP/SFTP hoặc dùng File Manager trong cPanel, xóa tất cả trừ thư mục wp-content:
❌ XÓA:
├── wp-admin/ (toàn bộ thư mục)
├── wp-includes/ (toàn bộ thư mục)
├── wp-login.php
├── wp-cron.php
├── wp-settings.php
├── wp-mail.php
├── wp-links-opml.php
├── wp-comments-post.php
├── wp-blog-header.php
├── wp-activate.php
├── wp-signup.php
├── xmlrpc.php ← ĐẶC BIỆT LƯU Ý
├── index.php (root)
├── readme.html
├── license.txt
└── wp-config-sample.php
✅ GIỮ LẠI:
└── wp-content/ (themes, plugins, uploads của bạn)
├── themes/
├── plugins/
└── uploads/
✅ GIỮ LẠI (để kiểm tra lại sau):
└── wp-config.php (kiểm tra kỹ trước khi giữ — xem bước 3b)
└── .htaccess (xem bước tắt XMLRPC)
3b. Kiểm tra file wp-config.php
File wp-config.php thường bị chèn mã độc ở đầu hoặc cuối. Mở file và kiểm tra:
- Chỉ giữ lại đúng cấu trúc chuẩn (DB credentials, table prefix, security keys).
- Xóa bất kỳ đoạn code lạ nào, đặc biệt là các chuỗi
base64hoặcevalở đầu/cuối file. - Regenerate Security Keys tại: https://api.wordpress.org/secret-key/1.1/salt/ — dán vào thay thế phần cũ.
3c. Tải về và cài lại WordPress Core mới nhất
- Tải bản WordPress mới nhất tại wordpress.org/download (hoặc phiên bản tiếng Việt tại vi.wordpress.org).
- Giải nén, upload toàn bộ các file/thư mục core (trừ
wp-contentvàwp-config.php) lên server. - Truy cập website — nếu hiện trang cập nhật database, nhấn Update WordPress Database.

Bước 4: Tắt XMLRPC — Bịt Lỗ Hổng Tấn Công Phổ Biến
xmlrpc.php là file cho phép truy cập WordPress từ xa. Đây là mục tiêu tấn công brute-force và DDoS phổ biến nhất trên WordPress. Nếu bạn không dùng ứng dụng mobile WordPress hoặc Jetpack, hãy tắt hoàn toàn.
Cách 1: Chặn qua .htaccess (khuyến nghị — nhanh và hiệu quả)
Thêm đoạn sau vào file .htaccess ở thư mục gốc (nếu chưa có tải ở đây)

apache
# Tắt XMLRPC hoàn toàn
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>
Cách 2: Chặn qua Nginx (nếu dùng Nginx)
nginx
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}
Cách 3: Dùng plugin (nếu không muốn sửa file)
Plugin Disable XML-RPC (wordpress.org) — nhẹ, miễn phí, cài xong kích hoạt là xong.
Kiểm tra lại: Sau khi cấu hình, dùng công cụ tại xmlrpc.rocks để xác nhận XMLRPC đã bị chặn thành công.
Bước 5: Xóa Và Cài Lại Plugin Sạch
Plugin lậu (nulled) là nguyên nhân hàng đầu khiến WordPress bị nhiễm virus. Sau khi đã dọn sạch core, cần làm sạch hoàn toàn phần plugin.


Quy trình
- Xóa toàn bộ thư mục
/wp-content/plugins/qua FTP. - Vào
wp-admin → Plugins, cài lại từng plugin theo danh sách bạn cần. - Chỉ cài plugin từ hai nguồn uy tín duy nhất:
- WordPress.org (miễn phí, có kiểm duyệt).
- Website chính thức của nhà phát triển (cho plugin trả phí/bản quyền).
Tại sao nên dùng plugin bản quyền?
| Tiêu chí | Plugin nulled (lậu) | Plugin bản quyền |
|---|---|---|
| Cập nhật bảo mật | ❌ Không có | ✅ Tự động |
| Hỗ trợ kỹ thuật | ❌ Không có | ✅ Có |
| Nguy cơ backdoor | ⚠️ Rất cao | ✅ Thấp |
| Tuân thủ pháp lý | ❌ Vi phạm bản quyền | ✅ Hợp lệ |
| Chi phí dài hạn | Cao (xử lý sự cố) | Thấp hơn khi tính tổng |
Các plugin bảo mật bản quyền đáng đầu tư:
- Wordfence Premium — tường lửa real-time, blacklist IP tự động.
- WP Cerber Security — chống brute-force, giới hạn đăng nhập.
- iThemes Security Pro — tổng hợp nhiều lớp bảo mật.
Kiểm tra plugin sau khi cài
Sau khi cài lại tất cả plugin, chạy lại Wordfence Scan để đảm bảo không còn file bị nghi ngờ.
Bước 6: Kiểm Tra Và Dọn Sạch Thư Mục wp-content/uploads
Thư mục uploads chứa ảnh và file media của bạn — nhưng hacker thường cấy file PHP vào đây vì thư mục này ít bị kiểm tra.

bash
# Tìm file PHP trong uploads (không bình thường — cần xóa ngay)
find /public_html/wp-content/uploads/ -name "*.php"
# Tìm file .htaccess lạ trong uploads
find /public_html/wp-content/uploads/ -name ".htaccess"
Thêm cấu hình .htaccess vào thư mục uploads để ngăn thực thi PHP:
apache
# Chặn thực thi PHP trong thư mục uploads
<Files *.php>
deny from all
</Files>
Bước 7: Kiểm Tra Database — Xóa Backdoor Ẩn Trong Database
Mã độc tinh vi thường lưu payload trong database (bảng wp_options, wp_posts) và thực thi từ đó. Core và file sạch nhưng database vẫn bẩn thì site vẫn bị nhiễm lại.

Kiểm tra bảng wp_options
sql
-- Tìm các giá trị có chứa mã độc phổ biến
SELECT option_name, option_value
FROM wp_options
WHERE option_value LIKE '%eval(%'
OR option_value LIKE '%base64_decode%'
OR option_value LIKE '%gzinflate%';
Kiểm tra bảng wp_posts và wp_postmeta
sql
SELECT ID, post_title, post_content
FROM wp_posts
WHERE post_content LIKE '%<script%'
AND post_status = 'publish';
Dùng plugin hỗ trợ
- WP Medic — quét database tự động, phát hiện các injection.
- Ninja Scanner — quét cả file lẫn database.
Bước 8: Kiểm Tra Và Dọn Sạch Theme
Theme cũng là nguồn nhiễm phổ biến — đặc biệt theme nulled hoặc theme cũ không cập nhật.
- Xóa tất cả theme không sử dụng — chỉ giữ theme đang dùng và một theme mặc định của WordPress (Twenty Twenty-Four).
- Mở
functions.phpcủa theme đang dùng — kiểm tra không có code lạ. - Nếu đang dùng theme mua bản quyền: tải lại bản mới nhất từ trang chủ nhà phát triển và upload đè lên.
- Nếu đang dùng theme tự code: chạy Wordfence Scan để kiểm tra từng file.
Không nên: Cài theme nulled từ các web chia sẻ file lậu. Hầu hết các theme này đã được chèn sẵn backdoor trước khi upload lên.
Bước 9: Cấu Hình Bảo Mật Sau Khi Làm Sạch
Sau khi đã dọn sạch, thiết lập các lớp bảo mật để ngăn tái nhiễm.
9a. Phân quyền file đúng chuẩn
bash
# Thư mục: 755
find /public_html/ -type d -exec chmod 755 {} \;
# File: 644
find /public_html/ -type f -exec chmod 644 {} \;
# wp-config.php: 440 (chỉ owner đọc được)
chmod 440 wp-config.php
9b. Thêm bảo vệ wp-config.php và .htaccess
apache
# Bảo vệ wp-config.php
<Files wp-config.php>
Order Deny,Allow
Deny from all
</Files>
# Bảo vệ .htaccess
<Files .htaccess>
Order Deny,Allow
Deny from all
</Files>
9c. Giới hạn đăng nhập và bật 2FA
- Cài plugin giới hạn số lần đăng nhập sai (Limit Login Attempts Reloaded).
- Bật Xác thực 2 yếu tố (2FA) cho tài khoản admin — dùng WP 2FA hoặc Google Authenticator.
- Đổi URL đăng nhập khỏi
/wp-login.phpmặc định — dùng WPS Hide Login.
9d. Tắt chỉnh sửa file theme/plugin trong wp-admin
Thêm vào wp-config.php:
php
define('DISALLOW_FILE_EDIT', true);
9e. Cấu hình tường lửa ứng dụng web (WAF)
- Cloudflare (miễn phí) — lọc traffic độc hại trước khi đến server, ẩn IP thật của server.
- Sucuri Firewall (trả phí) — WAF chuyên cho WordPress, chặn các cuộc tấn công SQLi, XSS, brute-force.
Bước 10: Yêu Cầu Google Xem Xét Lại (Nếu Bị Blacklist)
Nếu Google đã đánh dấu website của bạn là nguy hiểm:
- Đăng nhập Google Search Console.
- Vào Security Issues — xem chi tiết vấn đề Google phát hiện.
- Sau khi đã làm sạch hoàn toàn, nhấn Request a Review.
- Thời gian xét duyệt thường từ 1–3 ngày làm việc.
Bước 11: Thiết Lập Giám Sát Liên Tục
Xử lý xong không có nghĩa là xong vĩnh viễn. Cần giám sát tự động để phát hiện sớm.
| Công cụ | Tính năng | Chi phí |
|---|---|---|
| Wordfence Premium | Quét định kỳ, cảnh báo email | ~$119/năm |
| Sucuri Monitoring | Blacklist monitoring, uptime | Miễn phí → trả phí |
| ManageWP | Quản lý nhiều site, backup, bảo mật | Freemium |
| Uptime Robot | Cảnh báo khi site sập | Miễn phí |
| Google Search Console | Cảnh báo bảo mật từ Google | Miễn phí |
Tóm Tắt Quy Trình Xử Lý Virus WordPress
1. Cô lập → đổi mật khẩu, tắt public access
2. Quét → xác định phạm vi bị nhiễm
3. Xóa core → giữ wp-content, cài lại WordPress mới nhất
4. Tắt XMLRPC → chặn qua .htaccess hoặc Nginx
5. Cài lại plugin → chỉ từ wordpress.org hoặc bản quyền chính hãng
6. Dọn uploads → xóa file PHP lạ, chặn thực thi PHP
7. Quét database → xóa injection trong wp_options, wp_posts
8. Dọn theme → xóa theme nulled, cập nhật theme bản quyền
9. Cấu hình bảo mật → phân quyền file, 2FA, WAF, Cloudflare
10. Yêu cầu Google review → nếu bị blacklist
11. Giám sát liên tục → Wordfence, Search Console, Uptime Robot
Câu Hỏi Thường Gặp
Không cần xóa toàn bộ database. Chỉ cần kiểm tra và xóa các giá trị độc hại trong các bảng cụ thể như đã hướng dẫn ở Bước 7.
Không, nếu bạn chỉ xóa phần core WordPress (không xóa wp-content) và giữ nguyên wp-config.php. Toàn bộ bài viết, trang, media và cài đặt đều lưu trong database và wp-content.
Với người có kinh nghiệm kỹ thuật: 2–4 giờ. Nếu site phức tạp hoặc bị nhiễm nặng (database bẩn, nhiều file bị sửa): có thể 1–2 ngày.
Nếu bạn không có kỹ năng kỹ thuật (FTP, SSH, cơ sở dữ liệu), hãy thuê chuyên gia hoặc liên hệ công ty bảo mật WordPress. Tự làm sai có thể làm mất dữ liệu hoặc để lại backdoor không biết.
Kết Luận
Việc website WordPress bị nhiễm virus không phải là dấu chấm hết — nhưng cần xử lý đúng quy trình và triệt để. Xóa mỗi plugin virus một mình hay chỉ cài Wordfence là không đủ; hacker có thể để lại nhiều backdoor ở nhiều tầng khác nhau (file, database, theme, plugin).
Quy trình chuẩn là: làm sạch từ tầng core → plugin → theme → database → cấu hình bảo mật → giám sát liên tục. Đầu tư vào plugin và theme bản quyền từ đầu không chỉ giúp website an toàn hơn mà còn tiết kiệm chi phí xử lý sự cố về lâu dài.
Nếu bạn cần hỗ trợ xử lý virus WordPress hoặc nâng cấp bảo mật cho hệ thống, đội ngũ kỹ thuật của Golden Bee IT Solutions sẵn sàng tư vấn và hỗ trợ triển khai.
Để lại bình luận