Nội dung cốt lõi
[Mở rộng]- Nhận diện sớm: Phát hiện các dấu hiệu website WordPress nhiễm mã độc nhanh chóng.
- Nguyên nhân tấn công: Tìm hiểu lý do phổ biến khiến WordPress bị tấn công mã độc.
- Chuẩn bị làm sạch: Hướng dẫn các bước chuẩn bị cần thiết trước khi xử lý mã độc.
- Quét và diệt: Phương pháp quét, phát hiện và loại bỏ mã độc khỏi WordPress toàn diện.
- Khôi phục hệ thống: Các bước khôi phục website và gỡ cảnh báo Google sau xử lý.
- Phòng tránh tái nhiễm: Xây dựng hệ thống phòng thủ đa lớp, bảo vệ WordPress lâu dài.
- Xử lý chuyên biệt: Giải quyết các trường hợp mã độc WordPress phức tạp như cloaking.
- Tư vấn chuyên gia: Khi nào nên cân nhắc thuê dịch vụ chuyên nghiệp xử lý mã độc.
Nếu website WordPress của bạn đột nhiên chạy chậm bất thường, bị Google gắn cảnh báo “This site may be hacked“, hay hosting gửi email thông báo tài khoản bị tạm khóa – rất có thể bạn đang đối mặt với mã độc. Đây là tình huống không hiếm gặp: theo thống kê từ Wordfence, có hơn 300.000 website WordPress đang bị nhiễm mã độc cùng lúc.
Điều đó không có nghĩa WordPress bảo mật kém – mà đơn giản vì đây là nền tảng CMS phổ biến nhất thế giới, nên cũng là mục tiêu hàng đầu của hacker. Trong bài viết này, mình sẽ hướng dẫn bạn từng bước xử lý mã độc WordPress một cách bài bản: từ nhận diện dấu hiệu, quét và làm sạch, đến phục hồi website và thiết lập hệ thống phòng thủ dài hạn.

Tìm hiểu về mã độc WordPress & lý do website bị tấn công
Trước tiên, bạn cần hiểu rõ mình đang đối phó với thứ gì trước khi hành động. Từ đó giúp bạn chọn đúng phương pháp xử lý & không bỏ sót bước nào trong quá trình làm sạch.
Mã độc WordPress là gì?
Mã độc (malware) trên WordPress là bất kỳ đoạn code độc hại nào được chèn vào hệ thống website mà không có sự cho phép của chủ sở hữu. Chúng có thể nằm ẩn trong file PHP, database, theme, plugin hoặc thậm chí trong file ảnh. Các loại mã độc phổ biến nhất bao gồm:
- Backdoor: Tạo cửa hậu để hacker truy cập lại website bất cứ lúc nào, kể cả sau khi bạn đã đổi mật khẩu.
- Drive-by Download: Tự động tải phần mềm độc hại xuống máy tính của khách truy cập.
- Pharma Hack: Chèn nội dung quảng cáo thuốc/nội dung nhạy cảm vào trang web nhưng chỉ hiện với Google, không hiện với admin.
- Malicious Redirect: Chuyển hướng toàn bộ hoặc một phần lưu lượng truy cập sang website khác.
- SEO Spam: Chèn hàng loạt link và nội dung spam để thao túng kết quả tìm kiếm.
- Cryptomining Scripts: Sử dụng tài nguyên CPU của khách truy cập để đào tiền ảo ngầm.
Tại sao website WordPress của bạn bị tấn công?
Hacker không chọn mục tiêu ngẫu nhiên – họ khai thác những lỗ hổng có thể đoán trước được:
- Plugin/Theme lỗi thời hoặc null: Đây là nguyên nhân số một. Plugin không được cập nhật hoặc theme crack thường chứa lỗ hổng bảo mật nghiêm trọng.
- Mật khẩu yếu: Username “admin” kết hợp mật khẩu đơn giản là miếng mồi lý tưởng cho tấn công brute-force.
- Hosting chất lượng thấp: Môi trường shared hosting không được phân tách tốt cho phép mã độc lan từ website này sang website khác.
- Không có tường lửa ứng dụng web (WAF): Website bị lộ thiên trước các cuộc tấn công tự động.
- File permission sai: Cấu hình phân quyền lỏng lẻo cho phép kẻ tấn công ghi file tuỳ ý.

Dấu hiệu nhận biết website WordPress đã bị nhiễm mã độc
Phát hiện càng sớm thì càng giúp website giảm thiểu thiệt hại về mức thấp nhất. Mã độc thường cố tình ẩn mình, nhưng chúng luôn để lại dấu vết nếu bạn biết cách tìm. Dưới đây là 3 nhóm dấu hiệu bạn cần chú ý.
1. Dấu hiệu nhìn thấy được
- Website tự động chuyển hướng sang trang lạ khi truy cập (đặc biệt trên mobile hoặc lần đầu vào trang).
- Xuất hiện nội dung/link lạ không do bạn tạo ra – quảng cáo dược phẩm, cờ bạc hoặc nội dung 18+.
- Website hiển thị thông báo lỗi trắng tinh, blank page hoặc “500 Internal Server Error” bất thường.
- Tốc độ tải trang giảm đột ngột dù không thay đổi gì về nội dung hoặc cấu hình.
- Xuất hiện trang/bài viết mới mà bạn không tạo.
2. Dấu hiệu từ công cụ & bên thứ ba
- Google Search Console: Gửi cảnh báo “Security Issues” hoặc website bị Google đánh dấu “This site may harm your computer“.
- Google Safe Browsing: Hiển thị trang cảnh báo đỏ khi khách vào website.
- Hosting provider: Khóa tài khoản hoặc gửi email cảnh báo phát hiện file độc hại.
- Antivirus của người dùng: Báo động khi truy cập trang web của bạn.
- Thứ hạng SEO tụt dốc đột ngột không rõ lý do.
3. Dấu hiệu kỹ thuật
File wp-config.php, .htaccess hoặc index.php có thời gian chỉnh sửa (modified date) bất thường.
- Xuất hiện file PHP lạ trong thư mục uploads (thư mục này không nên chứa file .php).
- Cơ sở dữ liệu chứa các bản ghi lạ với các giá trị mã hóa base64 trong bảng
wp_options. - Tài khoản admin mới xuất hiện mà bạn không tạo.

Chuẩn bị trước khi xử lý mã độc WordPress
Đã biết website bị nhiễm rồi thì việc bạn cần làm là giữ bình tĩnh, đừng vội vàng xóa file hay cài plugin ngay, chuẩn bị đúng cách sẽ giúp bạn xử lý nhanh & triệt để hơn. Cụ thể hơn đây là 4 việc cần làm trước tiên.
1. Sao lưu toàn bộ website (ngay cả khi đã nhiễm)
Nghe có vẻ lạ, nhưng bạn vẫn nên backup website dù biết nó đang bị nhiễm. Backup này là bằng chứng để so sánh sau khi làm sạch và đảm bảo bạn không mất database hay nội dung quý giá. Hãy lưu ở nơi riêng biệt và không tự động restore mà không kiểm tra trước.
Backup nhanh qua cPanel:
- Vào cPanel → File Manager → Nén toàn bộ thư mục
public_html - Vào cPanel → phpMyAdmin → Export toàn bộ database
2. Bật chế độ maintenance
Trong khi xử lý, bạn không muốn khách truy cập bị nhiễm thêm từ website của mình. Thêm đoạn code sau vào file .htaccess (thay IP của bạn vào):
<IfModule mod_authz_core.c>
Require all denied
Require ip 123.123.123.123
</IfModule>
<IfModule !mod_authz_core.c>
Order Deny,Allow
Deny from all
Allow from 123.123.123.123
</IfModule>
3. Đổi toàn bộ mật khẩu
Trước khi bắt đầu làm sạch, hãy đổi ngay tất cả mật khẩu:
- Mật khẩu tài khoản WordPress admin
- Mật khẩu FTP/SFTP
- Mật khẩu database (cPanel/MySQL)
- Mật khẩu tài khoản cPanel/hosting
- Secret keys trong file
wp-config.php(lấy key mới tại wordpress.org/secret-key)
4. Ghi lại thông tin hệ thống
Ghi lại: phiên bản WordPress, danh sách plugin và theme đang dùng. Thông tin này sẽ cần khi bạn cài lại hoặc so sánh file sau khi làm sạch.

Cách quét và phát hiện mã độc WordPress
Sau khi đã chuẩn bị xong, đã đến lúc bắt tay vào việc quan trọng nhất: tìm ra chính xác mã độc đang ẩn náu ở đâu. Bạn có thể dùng công cụ tự động, làm thủ công hoặc kết hợp cả hai để có kết quả chính xác nhất.
1. Quét bằng plugin bảo mật
Nếu bạn vẫn còn quyền truy cập vào WordPress admin, đây là cách nhanh nhất:
Wordfence Security
- Vào Plugins → Add New → Tìm “Wordfence Security” → Cài đặt & kích hoạt
- Vào Wordfence → Scan → Start New Scan
- Wordfence so sánh từng file với bản gốc từ repository WordPress.org và báo cáo mọi thay đổi bất thường
Sucuri Security
- Cài đặt plugin Sucuri Security
- Vào Sucuri Security → Malware Scan
- Plugin gửi URL website đến hệ thống SiteCheck của Sucuri để quét từ bên ngoài
MalCare
Ưu điểm của MalCare là quét server-side, không làm chậm website trong quá trình scan. Phù hợp với website có lưu lượng cao.
2. Quét từ công cụ bên ngoài
Các công cụ này không cần cài đặt – chỉ nhập URL và chờ kết quả:
- Sucuri SiteCheck (sitecheck.sucuri.net): Quét blacklist, phát hiện malware, kiểm tra trạng thái DNS và WAF.
- VirusTotal (virustotal.com): Kiểm tra domain/URL qua hơn 70 engine antivirus.
- Google Safe Browsing: Kiểm tra xem Google đã đánh dấu website chưa (transparencyreport.google.com).
Lưu ý: External scanner chỉ thấy những gì public. Mã độc cloaked (chỉ hiển thị với Google, không hiển thị với admin) sẽ không bị phát hiện bởi công cụ này nếu bạn scan với IP thông thường.
3. Quét thủ công qua FTP/SSH
Đây là cách toàn diện nhất nhưng đòi hỏi kỹ thuật cao hơn. Các lệnh SSH hữu ích:
# PHP trong uploads
find wp-content/uploads -type f -name "*.php"
# File mới sửa
find . -type f -mtime -7 -name "*.php"
# Pattern malware
grep -rl "base64_decode" . --include="*.php"
grep -rl "eval(" . --include="*.php"
grep -rl "gzinflate" . --include="*.php"
Check file ẩn/backdoor:
find /path/to/public_html -type f -name "*.php" -perm 777
find /path/to/public_html -type f -name "*.php" -size +200k
Kiểm tra database qua phpMyAdmin:
Tìm kiếm trong các bảng wp_posts, wp_options, wp_users với các chuỗi: <script, eval(, base64, document.write, và các URL không phải domain của website bạn.

Hướng dẫn xử lý và xóa mã độc WordPress
Đã xác định được vị trí mã độc rồi – bây giờ là bước quan trọng nhất: làm sạch. Mình sẽ hướng dẫn bạn theo hai hướng: dùng plugin (phù hợp với người không chuyên kỹ thuật) và xử lý thủ công (cho những ai muốn kiểm soát hoàn toàn quá trình).
1. Xử lý bằng plugin
Wordfence Cleaner
Sau khi quét xong, Wordfence liệt kê các file bị nhiễm với nút “Repair” và “Delete”. Với file WordPress core bị sửa đổi, chọn “Repair” để restore về bản gốc. Với file hoàn toàn lạ không thuộc WordPress, chọn “Delete”.
MalCare Auto-Clean
MalCare (bản Pro) có tính năng auto-clean – quét và dọn dẹp tự động mà không cần bạn can thiệp thủ công. Hiệu quả cao với các loại mã độc phổ biến.
Lưu ý quan trọng: Plugin không phải lúc nào cũng làm sạch được 100%, đặc biệt với các biến thể mã độc phức tạp hoặc backdoor được giấu khéo. Sau khi dùng plugin, bạn vẫn nên kiểm tra lại thủ công.
2. Xử lý thủ công
Bước 1: Cài lại WordPress Core sạch
Download bản WordPress mới nhất từ wordpress.org, giải nén và upload đè lên các thư mục sau (KHÔNG đè lên wp-content và wp-config.php):
- /wp-admin/
- /wp-includes/
- Các file root:
wp-login.php, wp-cron.php, xmlrpc.php, index.php…
Xem hướng dẫn: Cách upload WordPress lên hosting đơn giản
Bước 2: Cài lại plugin và theme
Xóa hoàn toàn tất cả plugin và giao diện hiện tại. Sau đó cài lại theme, plugin cần thiết từ nguồn chính thức (wordpress.org hoặc trang nhà cung cấp). Tuyệt đối không dùng lại file plugin/theme cũ đã bị nhiễm. Với theme và plugin premium: liên hệ nhà cung cấp để lấy lại bản download sạch với license của bạn.
Bước 3: Làm sạch file wp-config.php
Mở file wp-config.php và kiểm tra kỹ: không có đoạn code nào ngoài các thông tin cấu hình chuẩn, không có require() hoặc include() trỏ đến file lạ. Thay thế tất cả Authentication Keys và Salts bằng giá trị mới từ wordpress.org/secret-key/
Bước 4: Làm sạch file .htaccess
Xóa nội dung file .htaccess hiện tại và tạo lại nội dung chuẩn:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Sau đó vào WP Admin → Settings → Permalinks → Save Changes để WordPress tự tạo lại .htaccess.
Bước 5: Làm sạch database
Đây là bước nhiều người bỏ sót nhất. Mã độc trong database có thể tái nhiễm lại file sau khi bạn đã làm sạch. Dùng phpMyAdmin tìm kiếm trong các bảng wp_posts, wp_options, wp_users, wp_usermeta các chuỗi sau:
- <script src=
- eval(
- base64_decode
- hacked by
- Các URL không phải của website bạn
Plugin hỗ trợ làm sạch database: WP-Optimize hoặc Search-Replace-DB (chạy từ ngoài WordPress).
Bước 6: Xóa tài khoản Admin lạ
Vào WordPress Admin → Users → Kiểm tra toàn bộ danh sách user. Xóa ngay bất kỳ tài khoản admin nào bạn không tạo. Đồng thời đổi mật khẩu cho tất cả tài khoản còn lại.
Bước 7: Kiểm tra thư mục wp-content/uploads
Thư mục uploads chỉ nên chứa file media (ảnh, video, PDF…), không bao giờ chứa file PHP. Tìm và xóa tất cả file .php trong uploads:
find wp-content/uploads -name "*.php" -delete

Xử lý các trường hợp đặc biệt thường gặp
Không phải mọi ca nhiễm mã độc đều giống nhau. Dưới đây là hướng xử lý cho những tình huống phức tạp mà mình thấy xuất hiện nhiều nhất trong thực tế.
1. Website bị chuyển hướng
Triệu chứng: Website tự động chuyển sang trang lạ, đặc biệt khi truy cập lần đầu hoặc từ mobile/kết quả tìm kiếm Google.
Nơi cần kiểm tra:
- File
.htaccess– tìm các dòng RewriteRule trỏ đến domain lạ - File
functions.phpcủa theme đang active - Bảng
wp_options– tìm các giá trị trong siteurl, home hoặc các option có chứa URL lạ - File
index.phpở thư mục gốc
2. Mã độc ẩn khỏi Admin (Cloaking)
Triệu chứng: Bạn vào website thấy bình thường, nhưng Google hoặc người dùng khác thấy nội dung lạ.
Cách kiểm tra: Dùng Google Search Console → URL Inspection Tool → “Test Live URL”. Hoặc giả lập Googlebot bằng cách thay đổi User Agent trong trình duyệt. Cloaking thường nằm trong file wp-cron.php, plugin/theme bị chỉnh sửa hoặc database chèn JavaScript chỉ render với certain User Agent.
3. Pharma Hack
Triệu chứng: Google index các trang với tiêu đề về thuốc, casino… nhưng bạn không thấy gì khi truy cập bình thường.
Kiểm tra nhanh bằng Google:
- site:yourwebsite.com viagra
- site:yourwebsite.com casino
Nơi thường ẩn: Theme bị inject thêm code PHP, database chứa bài viết ẩn hoặc file .htaccess phục vụ nội dung khác nhau dựa theo User Agent.
4. Website bị hosting khóa do mã độc
Trong trường hợp này, bạn không thể truy cập FTP hay cPanel bình thường. Liên hệ ngay bộ phận hỗ trợ của hosting và yêu cầu:
- Danh sách file bị đánh dấu độc hại (hosting thường có sẵn báo cáo này)
- Quyền truy cập tạm thời để làm sạch
- Hoặc restore backup từ trước thời điểm bị nhiễm

Khôi phục website và thông báo cho Google sau khi làm sạch
Làm sạch xong mã độc mới chỉ là nửa công việc. Bước tiếp theo là đưa website trở lại hoạt động bình thường và “gỡ nhãn đen” từ Google – đây là bước quan trọng để tránh mất thêm traffic và uy tín.
1. Kiểm tra lại lần cuối trước khi mở website
- Chạy lại Wordfence Scan hoặc Sucuri SiteCheck một lần nữa để xác nhận website đã sạch
- Truy cập website từ chế độ ẩn danh (Incognito) và thử các trang chính
- Kiểm tra với user agent của Googlebot (dùng Google Search Console → URL Inspection)
- Kiểm tra console trình duyệt (F12) xem có request lạ không
2. Yêu cầu Google xem xét lại
Nếu website của bạn bị Google đánh dấu hoặc bị loại khỏi index:
- Đăng nhập Google Search Console
- Vào Security & Manual Actions → Security Issues
- Kiểm tra từng vấn đề được liệt kê
- Sau khi đã xử lý, nhấn Request Review
- Mô tả ngắn gọn những gì bạn đã làm (Google đánh giá cao sự minh bạch)

Thời gian xử lý từ Google: Thường từ 1–3 ngày làm việc. Trong một số trường hợp có thể lên đến 1–2 tuần. Hãy kiên nhẫn và không submit review nhiều lần liên tiếp.
3. Submit lại sitemap
Vào Google Search Console → Sitemaps → Xóa sitemap cũ → Submit lại sitemap mới. Điều này giúp Google crawl lại website nhanh hơn và cập nhật index.
4. Thông báo khách hàng/người dùng (nếu cần thiết)
Nếu website có chức năng thành viên hoặc thu thập thông tin người dùng và bạn nghi ngờ dữ liệu đã bị truy cập trái phép – bạn có trách nhiệm thông báo cho người dùng. Điều này không chỉ là đúng đắn về mặt đạo đức mà còn có thể là yêu cầu pháp lý tùy quốc gia.
Phòng ngừa mã độc WordPress tái nhiễm lâu dài
Làm sạch mà không củng cố bảo mật thì chỉ là chuyện của hôm nay – ngày mai hacker vẫn có thể quay lại. Đây là hệ thống phòng thủ nhiều lớp mà mình khuyên bạn nên thiết lập ngay sau khi website đã sạch.
1. Cập nhật WordPress, plugin và theme thường xuyên
Đây là biện pháp bảo mật đơn giản nhất nhưng quan trọng nhất. Hầu hết các cuộc tấn công thành công đều khai thác lỗ hổng đã biết – lỗ hổng mà bản vá đã có sẵn nhưng người dùng không cập nhật.
Bật tự động cập nhật WordPress core trong wp-config.php:
define('WP_AUTO_UPDATE_CORE', true);
Với plugin: Vào Dashboard → Updates → Bật auto-update cho từng plugin quan trọng.
2. Cài đặt plugin bảo mật thường trực
- Wordfence Security (miễn phí & Pro): Firewall, malware scanner, login protection
- Solid Security (miễn phí & Pro): Đặt lại file permission, ẩn wp-admin, 2FA
- Sucuri Security (miễn phí & Pro): Audit log, integrity checking, WAF (Pro)
3. Thiết lập tường lửa ứng dụng web (WAF)
WAF là lớp phòng thủ đầu tiên, chặn request độc hại trước khi chúng đến được WordPress:
- Cloudflare (miễn phí): Cung cấp WAF cơ bản và bảo vệ DDoS
- Sucuri WAF (trả phí): Chuyên dụng cho WordPress, cực kỳ hiệu quả
- Wordfence Premium: Bao gồm WAF với rule set cập nhật real-time
4. Cứng hóa bảo mật WordPress (Hardening)
- Đổi URL đăng nhập từ /wp-admin sang URL khác (dùng plugin WPS Hide Login)
- Bật xác thực 2 bước (2FA) cho tài khoản admin
- Giới hạn số lần đăng nhập sai (plugin Limit Login Attempts Reloaded)
Vô hiệu hóa XML-RPC nếu không dùng – thêm vào .htaccess:
<Files xmlrpc.php>
Require all denied
</Files>
Tắt file editing trong wp-admin – thêm vào wp-config.php:
define('DISALLOW_FILE_EDIT', true);
Disable PHP upload, thêm vào /wp-content/uploads/.htaccess:
<Files *.php>
Require all denied
</Files>
Đặt file permission đúng chuẩn:
- Thư mục: 755 (chỉ được xem và truy cập thư mục)
- File: 644 (chỉ được đọc)
- wp-config.php: 600 (không được đọc và sửa)
5. Sao lưu tự động định kỳ
- UpdraftPlus: Backup tự động lên Google Drive, Dropbox, Amazon S3
- BlogVault: Backup real-time, restore 1-click không cần kỹ thuật
- Jetpack Backup: Tích hợp sâu với WordPress, backup từng thay đổi
Tần suất backup khuyến nghị: hàng ngày với website thường xuyên thay đổi, hàng tuần với website ít cập nhật.
6. Chọn hosting bảo mật cao
Hosting tốt là nền tảng của mọi biện pháp bảo mật. Khi chọn hosting, hãy ưu tiên:
- Hỗ trợ PHP phiên bản mới nhất (8.2+)
- Có tường lửa server-level tích hợp
- Phân tách website (không dùng chung tài nguyên)
- Có malware scanning tích hợp
- Hỗ trợ SSL/HTTPS mặc định và cài đặt dễ dàng

Khi nào nên thuê chuyên gia bảo mật WordPress?
Không phải mọi ca nhiễm mã độc đều có thể tự xử lý, vì thế bạn nên cân nhắc làm việc với chuyên gia bảo mật khi:
- Đã làm sạch nhiều lần nhưng mã độc vẫn tái xuất hiện sau vài ngày (dấu hiệu còn backdoor ẩn sâu)
- Website chứa dữ liệu nhạy cảm của khách hàng (thông tin thẻ ngân hàng, hồ sơ cá nhân)
- Website là kênh doanh thu chính và mỗi giờ downtime là thiệt hại đáng kể
- Bạn không có quyền truy cập SSH hoặc không quen với command line
- Hosting xác nhận máy chủ bị xâm phạm ở cấp độ hệ thống
FAQ – Câu hỏi thường gặp về mã độc WordPress
Tổng kết
Xử lý mã độc WordPress không phải là thứ bạn muốn làm, nhưng khi đã gặp phải, đây là kỹ năng cực kỳ giá trị. Hy vọng qua bài viết này, bạn đã nắm được toàn bộ quy trình từ A đến Z:
- Nhận diện dấu hiệu nhiễm mã độc sớm
- Chuẩn bị đúng cách trước khi bắt tay làm sạch
- Quét bằng nhiều công cụ để tìm đúng vị trí mã độc
- Xử lý thủ công hoặc bằng plugin theo đúng thứ tự
- Khôi phục website và xin Google gỡ cảnh báo
- Phòng ngừa tái nhiễm với hệ thống bảo mật nhiều lớp
Điều quan trọng nhất mình muốn bạn ghi nhớ: phòng bệnh hơn chữa bệnh. Nên kiểm tra định kỳ mỗi tháng để chắc chắn website vẫn đang an toàn, điều này sẽ giúp bạn tránh những rắc rối không đáng có.
Website của bạn có đã từng bị nhiễm mã độc không? Nếu được hãy chia sẻ nguyên nhân cũng như cách xử lý của bạn đến mọi người thông qua phần bình luận bên dưới nhé!


