Hướng dẫn tạo website miễn phí với Google Sites cho người mới
Google Sites là công cụ tạo website miễn phí của Google, cho phép bất kỳ ai có tài khoản Gmail đều có thể xây dựng một trang web chỉ bằng thao tác kéo thả mà không cần biết một dòng...
Website WordPress của bạn đột nhiên tải trang chậm bất thường, xuất hiện liên kết lạ trong nội dung, Google Search Console báo lỗi “This site may be hacked”, thứ hạng SEO tụt giảm mạnh, hoặc khách hàng của bạn bị spam email lừa đảo từ domain của bạn? Ồ, thật không may đây là những dấu hiệu cho thấy rằng rõ ràng của website của bạn đã bị hack, dính virus website hoặc malware WordPress, hay một cuộc tấn công mạng tinh vi.

Đừng lo, bài viết này sẽ chia sẻ về quy trình 6 bước xử lý mã độc website WordPress cho mọi cấp độ giúp nhanh chóng phát hiện virus website, loại bỏ malware, vá lỗ hổng bảo mật, chống hack WordPress tái nhiễm mà Lê Phúc đã áp dụng để xử lý cho hàng chục website dính virus.
Việc xử lý mã độc WordPress không phải cứ cài plugin quét rồi “Clean” là xong. Cách làm cảm tính đó thường chỉ khiến tình trạng nặng hơn và hacker dễ dàng quay lại. Chính vì thế chúng ta cần một quy trình bài bản, có hệ thống từ kiểm tra, làm sạch, vá lỗ hổng đến tăng cường bảo mật lâu dài. Hãy cùng mình đi tìm hiểu nhé!
Đối với người mới bắt đầu xử lý malware WordPress, bước này giống như “khảo sát địa hình” trước khi chiến đấu. Nếu bỏ qua, bạn có thể xóa nhầm file quan trọng, dẫn đến website “chết” hoàn toàn. Backup giúp bạn có “bản sao an toàn” để khôi phục nếu sai sót – đặc biệt khi website bị hack thường kèm theo rủi ro mất dữ liệu.
Bắt đầu bằng các công cụ miễn phí không cần kỹ thuật cao:
Kết quả sẽ cho bạn biết mức độ nghiêm trọng, giúp quyết định có cần chuyên gia hay tự làm.
Cách đơn giản và nhanh nhất là dùng plugin với mình thường dùng plugin All-in-One WP Migration đối với site nhỏ hoặc plugin UpdraftPlus đối với site vừa để backup website WordPress.
UpdraftPlus là plugin miễn phí, và được nhiều người sử dụng dụng nhất:

All-in-One WP Migration là plugin có giao diện dễ dùng, nhưng bản miễn phí có giới hạn 512MB:
Lưu ý: Backup trước khi dọn mã độc. Luôn kiểm tra file tải về có mở hoặc backup ngược lại được không.
Vào server/hosting qua cPanel
Bước 1: Backup toàn bộ code (file website)
Bước 2: Backup database (SQL)
Quét nhanh chỉ phát hiện bề mặt, nhưng malware WordPress thường ẩn sâu trong file hệ thống hoặc database. Bước này giúp bạn lập “bản đồ” nhiễm độc, tránh bỏ sót – đặc biệt với người mới, giúp hiểu rõ vấn đề trước khi xóa.

Nếu bạn có quyền SSH (hầu hết VPS/Cloud hosting có), đây là cách quét chuyên sâu nhất nhưng bạn cũng hãy chú ý khi làm việc trực tiếp trên server tránh dùng các lệnh mà mình chưa rõ hoặc biết để tránh sai sót không quay lại được.
Cài ClamAV miễn phí, phổ biến nhất:
# Trên Ubuntu/Debian
sudo apt update && sudo apt install clamav clamav-daemon -y
# Update database virus mới nhất
sudo freshclam
# Quét toàn bộ site, loại trừ cache để tránh false positive
clamscan -r --bell -i --exclude-dir=^/home/user/public_html/wp-content/cache/home/user/public_html/ > scan_result.txt
Phân tích kết quả ClamAV:
Cài Maldet cho Linux Malware Detect:
wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
tar xzf maldetect-current.tar.gz
cd maldetect-*
sudo ./install.sh
maldet -u # Update signature
maldet -a /home/user/public_html/ # Quét toàn bộ
Phân tích Maldet:
Backup toàn bộ site về máy tính cá nhân → Quét bằng công cụ mạnh trên Windows/Mac/Linux.
Bước thực hiện:
Cài Wordfence CLI trên local
# Cài PHP nếu chưa có (Windows: dùng XAMPP, Mac: brew install php)
wget https://github.com/wordfence/wordfence-cli/releases/latest/download/wordfence-cli.phar
php wordfence-cli.phar scan /path/to/your/backup_site/public_html
Phân tích chuyên sâu trên local:
clamscan -r --bell -i /path/to/backup_site/public_html > local_scan.txt
# Tìm chuỗi nguy hiểm
grep -r -i "eval\|base64_decode\|gzinflate\|shell_exec" /path/to/public_html
Ưu điểm quét local:
Hacker dùng chuỗi mã hóa để giấu code xấu:
eval(base64_decode(‘aHR0cDovL…’));
@eval(@gzinflate(@str_rot13(@base64_decode(‘eJyV…’))));
Mục đích: chèn backdoor, spam, redirect, ads.
File cho phép điều khiển server:
c99.php, wso.php, b374k.php, indoxploit.php
Code thường có:
shell_exec($_POST[‘cmd’]);
system($_GET[‘cmd’]);
Hay giấu trong: uploads/, file .jpg.php, .ico, tên random.
Chèn iframe, script, hoặc .htaccess:
<iframe src=”bad.com” style=”display:none”></iframe>
RewriteRule ^(.*)$ http://bad.com [R=301,L]
Dùng để đẩy link cá cược, 18+, hoặc redirect người dùng.
Không chỉ nằm trong file, mà còn xâm nhập vào DB:
Hay gặp trong:
Ví dụ:
<script>window.location=”http://bad.com”</script>
Hoặc serialized:
a:1:{s:4:”code”;s:100:”<script src=’bad.js’></script>”;}
Tác hại: tự động chèn JS, iframe mỗi lần load site.
Wordfence là công cụ tốt nhất cho beginner: quét sâu, xóa mã độc an toàn mà không cần code. Nếu site còn vào được wp-admin, bắt đầu ngay.
Kết nối FTP → Vào wp-content/uploads → Xóa hết file .php, .ico, .jpg.php (bình thường không có).
Kiểm tra wp-includes, wp-admin → Tìm file lạ (tên random, ngày sửa mới nhất).
Kiểm tra quyền file: file nào 777 → đổi về 644 ngay.
Cách cần kĩ thuật hơn là dùng SSH + grep qua PuTTY hoặc terminal để tìm nhanh, chính xác bạn tham khảo một vài lệnh dưới đây hay được sử dụng:
# Tìm eval + base64 toàn site, include cả .js (mã độc JS ngày càng phổ biến)
grep -rP --include=\*.{php,js,html} "(eval|base64_decode|gzinflate|str_rot13|exec|shell_exec|system|passthru)" /home/user/public_html/ > infected_files.txt
# Tìm chuỗi base64 dài bất thường (dấu hiệu obfuscated code)
grep -rP --include=\*.php "base64_decode\('[^']{300,}'" /home/user/public_html/
# Tìm iframe/script ẩn
grep -rP --include=\*.{php,html} "(<iframe.*display:none|<script.*unescape|document\.write)" /home/user/public_html/
# Tìm webshell signature (ví dụ c99 shell có chuỗi đặc trưng)
grep -r "c99shell" /home/user/public_html/ || grep -r "WSO_VERSION" /home/user/public_html/

Sau khi tìm thấy để giải mã base64 có thể dùng tool online base64decode.org hoặc viết một đoạn Python script local đơn giản như:
# Chạy local để decode an toàn
import base64
encoded = 'ZXZhbCgkX1BPU1RbJ2EnXSk7' # Thay bằng chuỗi tìm được
print(base64.b64decode(encoded).decode('utf-8')) # Output: eval($_POST['a']);
Nếu code chứa $_POST hoặc $_GET, đó là backdoor remote hãy xoá ngay.
Đưa site về maintenance mode (tránh rủi ro):
Tạo user admin mới an toàn (tránh user cũ bị hack):
INSERT INTO wp_users (user_login, user_pass, user_nicename, user_email, user_status)
VALUES ('newadmin', MD5('MatKhauManh@2025!'), 'newadmin', 'your@email.com', 0);
INSERT INTO wp_usermeta (user_id, meta_key, meta_value)
VALUES (ID_moi, 'wp_capabilities', 'a:1:{s:13:"administrator";b:1;}');
INSERT INTO wp_usermeta (user_id, meta_key, meta_value)
VALUES (ID_moi, 'wp_user_level', '10');
Lý do: User cũ có thể bị chiếm, backdoor ẩn trong usermeta. Đăng nhập bằng user mới để dọn. Lưu ý: Thay MD5 bằng hash mạnh hơn nếu dùng WordPress mới (wp_generate_password).
Xóa mã độc file thủ công (kết hợp Wordfence):
Làm sạch database chi tiết (xóa entry độc):
-- Xóa option chứa mã độc (kiểm tra trước bằng SELECT để tránh xóa nhầm)
DELETE FROM wp_options WHERE option_value LIKE '%eval(%' OR option_value LIKE '%base64_decode(%' OR option_value LIKE '%gzinflate(%';
-- Xóa injection trong posts (thay 'bad.com' bằng domain độc hại thực)
UPDATE wp_posts SET post_content = REPLACE(post_content, '<iframe src="bad.com" style="display:none"></iframe>', '')
WHERE post_content LIKE '%<iframe%';
-- Xóa trong postmeta/usermeta
DELETE FROM wp_postmeta WHERE meta_value REGEXP '(eval|base64|shell_exec)';
Lý do: Mã độc ẩn 60% trong database, Wordfence không luôn clean hết – thủ công chính xác hơn. Lưu ý: Chạy SELECT trước DELETE để preview, tránh xóa dữ liệu quan trọng. Nếu database lớn, dùng WP-CLI: wp db query “SQL đây”.
Reset password tất cả user và kiểm tra log:
wp user list --field=ID | xargs -n1 wp user reset-password --user_pass='NewStrongPass@2025!'
Kết thúc: Quét lại toàn diện với Wordfence + công cụ khác.
Bước 1: Backup toàn bộ site về máy tính
File: zip toàn bộ public_html
Database: export .sql qua phpMyAdmin
Bước 2: Giải nén ra thư mục local (ví dụ: D:\site-bi-hack)
Bước 3: Quét + tìm mã độc cực mạnh trên local
Mở Terminal/PowerShell trong thư mục đó, chạy lệnh:
# 1. Tìm toàn bộ hàm nguy hiểm (eval, base64, shell_exec...)
grep -rP --include=*.{php,js,html,txt} "(eval|base64_decode|gzinflate|str_rot13|rot13|exec|shell_exec|system|passthru|popen|proc_open|create_function)" . > DANGER.txt
# 2. Tìm chuỗi base64 dài bất thường (>300 ký tự)
grep -rP --include=*.php "base64_decode\('[^']{300,}'" . > LONG_BASE64.txt
# 3. Tìm iframe/script ẩn + webshell
grep -rP --include=*.{php,html} "(<iframe.*display:none|<script.*unescape|document\.write|c99shell|WSO_VERSION|b374k)" . > HIDDEN_IFRAME.txt
# 4. Tìm file .php trong uploads (chắc chắn là shell)
find . -path "*/wp-content/uploads/*" -name "*.php" -o -name "*.phtml" -o -name "*.ico" -o -name "*.jpg" | grep -v ".jpg.jpg"
Bước 4: Giải mã base64 ngay trên local (Python)
Tạo file ví dụ tên là decode.py sau đó chèn đoạn code sau vào:
import base64, sys
if len(sys.argv) < 2:
print("Usage: python decode.py 'chuoi_base64_here'")
else:
try:
print(base64.b64decode(sys.argv[1]).decode('utf-8'))
except:
print("Not valid base64")
Bước 4: Tìm thủ công bằng VS Code / Notepad++: Tìm kiếm chuỗi mã độc phổ biến như eval, base64_decode, gzinflate, shell_exec,… trong toàn bộ thư mục.
Bước 5: Phân tích và xóa file nhiễm trên local trước, sau đó upload lại bản sạch lên server.
Đầu tiên tắt tất cả plugin thông qua wp-admin hoặc đổi tên thư mục đổi tên thư mục wp-content/plugins thành plugins_old, xóa file lạ qua FTP để xem tình trạng có hết hay cải thiện hơn không. Nếu thấy chưa khả thi thì chuyển qua bước nâng cao sau:
-- Kiểm tra trước
SELECT * FROM wp_options WHERE option_value LIKE '%eval%' OR option_value LIKE '%base64%';
-- Xóa
DELETE FROM wp_options WHERE option_value LIKE '%eval(%' OR option_value LIKE '%base64_decode(%';
Ưu tiên làm trên local khi có thể → an toàn, không ảnh hưởng server đang hoạt động.
wp core update --force
wp plugin update --all --exclude=akismet,hello
wp theme update --all
wp plugin delete plugin-name-nulled

Đổi tất cả (WordPress, FTP, database) bằng công cụ như LastPass. Bật 2FA với plugin Two Factor (miễn phí, hỗ trợ Google Authenticator).

Thêm vào wp-config.php:
define('DISALLOW_FILE_EDIT', true); // Tắt editor theme/plugin
define('FORCE_SSL_ADMIN', true); // Bắt buộc SSL wp-admin
define('WP_AUTO_UPDATE_CORE', true); // Auto update core
define('WP_HTTP_BLOCK_EXTERNAL', true); // Chặn request ngoài
define('WP_ACCESSIBLE_HOSTS', 'api.wordpress.org,downloads.wordpress.org'); // Cho phép chỉ WP repo
Set permission: chmod -R 755 /public_html/ && chmod 644 *.php – dùng SSH.
Firewall & bảo vệ wp-admin
Cài Wordfence Premium hoặc Cloudflare WAF (miễn phí tier). Bảo vệ wp-admin bằng .htaccess hoặc :
# END WordPress
# BEGIN Custom Security Rules (Thêm các quy tắc bảo mật của bạn ở đây)
# wp-admin/.htaccess
<Files wp-login.php>
Order Deny,Allow
Deny from all
Allow from 113.172.123.45 # IP static của bạn
</Files>
# Hoặc dùng Basic Auth
AuthType Basic
AuthName "Admin Area"
AuthUserFile /home/user/.htpasswd
Require valid-user
# 1. Bảo vệ file wp-config.php
<Files wp-config.php>
Order allow,deny
Deny from all
</Files>
# 2. Vô hiệu hóa duyệt thư mục
Options -Indexes
# 3. Bảo vệ file .htaccess chính nó
<Files .htaccess>
Order allow,deny
Deny from all
</Files>
# 4. Chặn truy cập vào XML-RPC (Chỉ khi bạn không sử dụng)
<Files xmlrpc.php>
Order allow,deny
Deny from all
</Files>
# 5. Chặn tác giả có tên người dùng đáng ngờ (Author Scan)
RewriteEngine On
RewriteCond %{QUERY_STRING} author=(\d*)
RewriteRule .* - [F]
# END Custom Security Rules
Tạo file .htpasswd: dùng để tạo file .htpasswd trong Apache để bật HTTP Basic Authentication
htpasswd -c .htpasswd username.
Thêm vào trong file functions.php hoặc tạo 1 custome plugin chèn code php sau:
/**
* Clean WordPress head tags (unused)
*/
add_action('init', function () {
// REST API discovery link
remove_action('wp_head', 'rest_output_link_wp_head', 10);
// oEmbed discovery
remove_action('wp_head', 'wp_oembed_add_discovery_links', 10);
remove_action('wp_head', 'wp_oembed_add_host_js');
// RSD (Really Simple Discovery - xmlrpc)
remove_action('wp_head', 'rsd_link');
// Windows Live Writer
remove_action('wp_head', 'wlwmanifest_link');
// WordPress version
remove_action('wp_head', 'wp_generator');
// Shortlink
remove_action('wp_head', 'wp_shortlink_wp_head', 10);
// Feed links (nếu không dùng RSS)
remove_action('wp_head', 'feed_links', 2);
remove_action('wp_head', 'feed_links_extra', 3);
});
// Disable REST API for non-logged-in users
add_filter('rest_authentication_errors', function ($result) {
if (!is_user_logged_in()) {
return new WP_Error(
'rest_disabled',
__('REST API is disabled.'),
['status' => 403]
);
}
return $result;
});
add_filter('xmlrpc_enabled', '__return_false');
Load site từ trình duyệt ẩn danh:
Quét lại bằng 3 công cụ online/miễn phí:
Kiểm tra nhanh qua trình duyệt:
Kiểm tra log server (SSH hoặc cPanel → File Manager → logs): tail -f /var/log/apache2/access.log | grep -i “eval\|base64\|shell\|wp-login\|xmlrpc”
Quét sâu bằng Wordfence CLI (nếu đã backup về local): php wordfence-cli.phar scan /path/to/public_html
Kiểm tra toàn diện:
Điều kiện trước khi request review:

Các bước thực hiện (làm theo thứ tự):
Lưu ý:
Bảng checklist quy trình xử lý virut mình thường thực hiện sau khi diệt mã độc WP bạn có thể tham khảo tại: https://docs.google.com/spreadsheets/d/17Wps4g1Zl8N3x8EPe_sgJk75rbC9cqhonSRuv3dCfKE/edit?usp=sharing
Trên đây là quy trình xử lý mã độc WordPress từ cơ bản đến nâng cao, giúp diệt sạch virus website, vá lỗ hổng và tăng bảo mật WordPress chống tái nhiễm nhanh chóng và hiệu quả. Chúng ta có thể thấy rằng không có một cú click hay một plugin thần thánh tự xử lý tự động hết cả. Từ backup cẩn thận, scan sâu, làm sạch thủ công, update triệt để, harden bảo mật đến kiểm tra lại kỹ lưỡng – mỗi bước đều quan trọng như nhau.

Nhưng điều quan trọng nhất vẫn là: phòng ngừa luôn tốt hơn chữa trị, update và backup định kỳ, dùng phần mềm chính hãng và theo dõi log đó mới là cách tiết kiệm thời gian, tiền bạc và giữ website an toàn bền vững.
Hy vọng bài viết này giúp bạn tự tin bảo vệ website của mình, hoặc áp dụng cho các dự án, giúp Google không còn gắn cờ đen và đánh giá cao nội dung chất lượng.
Chúc bạn thành công để có được một website sạch sẽ, an toàn và phát triển bền vững!