Thông tin tổng quan:
Xử lý mã độc website WordPress là quy trình kỹ thuật nhằm phát hiện, cô lập và loại bỏ hoàn toàn các tệp tin độc hại (malware, backdoor, shell) và vá các lỗ hổng bảo mật để khôi phục trạng thái hoạt động bình thường của website. Thay vì chỉ cố gắng gỡ bỏ mã độc trên nền tảng cũ vốn tiềm ẩn nhiều rủi ro tái nhiễm, quy trình chuẩn khuyến nghị bởi InterData bao gồm việc cô lập website, sao lưu dữ liệu quan trọng (database, uploads), làm sạch thủ công và thực hiện cài đặt lại mã nguồn WordPress sạch từ đầu.
- Dấu hiệu nhận biết: Traffic giảm đột ngột, xuất hiện tài khoản Admin lạ, website tự chuyển hướng (redirect) sang web đen, hoặc cảnh báo “Deceptive site ahead” từ Google.
- Nguyên nhân gốc rễ: Phổ biến nhất là do sử dụng Plugin/Theme nulled (bẻ khóa), mật khẩu quản trị quá yếu, hoặc không cập nhật phiên bản WordPress/Plugin định kỳ.
- Quy trình 5 bước: Sao lưu (Backup) → Làm sạch (Clean) → Reset & Cài mới (Reinstall) → Quét lại (Rescan) → Bảo mật (Harden).
- Công cụ hỗ trợ: Wordfence, Sucuri, Imunify360, VirusTotal và các lệnh thao tác trên Hosting.
Bạn truy cập vào website tâm huyết của mình và thay vì giao diện quen thuộc, thứ đập vào mắt là một màn hình trắng xóa, những dòng chữ tiếng Nhật lạ lẫm, hay tệ hơn là bị chuyển hướng thẳng sang một trang web cờ bạc, nội dung đồi trụy?
Cảm giác hoảng loạn lúc này là điều dễ hiểu. Không chỉ doanh thu bị ngưng trệ, uy tín thương hiệu bị đe dọa, mà bạn còn đối mặt với nguy cơ bị Google gắn cờ cảnh báo “Deceptive site ahead” (Trang web lừa đảo), khiến công sức SEO bao năm đổ sông đổ biển.
Bạn không đơn độc. Theo thống kê từ Wordfence, mỗi phút có hơn 90.000 cuộc tấn công vào các website WordPress trên toàn cầu. Tuy nhiên, tin tốt là website của bạn hoàn toàn có thể cứu được.
Tại bài viết này, đội ngũ kỹ thuật của InterData sẽ không chỉ cho bạn cách “dán băng cá nhân” tạm thời. Chúng tôi sẽ hướng dẫn bạn quy trình chi tiết từng bước để loại bỏ hoàn toàn mã độc, khôi phục dữ liệu và biến website trở thành một pháo đài kiên cố. Hãy bình tĩnh và bắt đầu từng bước một.
Dấu hiệu nhận biết website dính mã độc là gì?

Mã độc (Malware) ngày nay rất tinh vi. Chúng không phải lúc nào cũng phá hỏng giao diện ngay lập tức. Hacker thường muốn giữ website của bạn hoạt động bình thường để lợi dụng tài nguyên server hoặc SEO traffic. Dưới đây là những dấu hiệu phổ biến nhất:
1. Cảnh báo trình duyệt và Công cụ tìm kiếm
Dấu hiệu rõ ràng nhất là khi truy cập website, trình duyệt Chrome hoặc Firefox hiển thị màn hình đỏ với thông báo “The site ahead contains malware” (Trang web sắp truy cập chứa phần mềm độc hại) hoặc “Deceptive site ahead”.
2. Chuyển hướng (Redirects) bất thường
Đây là triệu chứng rất phổ biến của các loại mã độc “Mobile Redirect”. Khi bạn truy cập trang chủ hoặc nhấp vào một liên kết bất kỳ, website tự động chuyển hướng sang các trang web spam, trang bán thuốc giả, cá độ hoặc nội dung người lớn. Đôi khi, tình trạng này chỉ xảy ra khi truy cập bằng thiết bị di động để qua mặt quản trị viên.
3. Tài khoản Admin lạ xuất hiện
Nếu bạn kiểm tra mục Users (Thành viên) trong Dashboard và thấy xuất hiện các tài khoản có quyền Administrator mà bạn không hề tạo (thường có tên như wp_update, system_admin, hoặc các chuỗi ký tự ngẫu nhiên), chắc chắn website đã bị chiếm quyền kiểm soát.
4. Google Index nội dung với ngôn ngữ lạ
Khi tìm kiếm tên miền của bạn trên Google (cú pháp site:domain.com), kết quả trả về lại hiển thị tiêu đề và mô tả bằng tiếng Nhật, tiếng Trung hoặc tiếng Nga, quảng cáo các sản phẩm không liên quan. Đây là kỹ thuật SEO Spam điển hình.
5. Hosting thông báo tạm khóa hoặc quá tải
Bạn nhận được email từ nhà cung cấp Hosting thông báo tạm ngừng dịch vụ (Suspend) do tài khoản của bạn đang gửi hàng ngàn email spam hoặc tiêu tốn 100% CPU liên tục. Đây là dấu hiệu server của bạn đang bị lợi dụng để tấn công DDoS hoặc đào tiền ảo.
Bước 1: Sao lưu dữ liệu cần thiết
Chúng ta sẽ không sao lưu “nguyên con” (Full Backup) vì mã độc nằm rải rác khắp nơi. Chúng ta chỉ sao lưu những thành phần cốt lõi không thể thay thế.
1. Sao lưu Database (Cơ sở dữ liệu)
Database chứa toàn bộ bài viết, trang, bình luận, thông tin đơn hàng và cấu hình cài đặt. Mất database nghĩa là mất website.
- Truy cập vào trang quản trị Hosting (cPanel).
- Mở công cụ phpMyAdmin.
- Chọn cơ sở dữ liệu của website bị nhiễm.
- Nhấn vào tab Export (Xuất).
- Chọn phương thức Quick và định dạng SQL, sau đó nhấn Go để tải về máy tính.

2. Sao lưu thư mục Uploads
Thư mục /wp-content/uploads/ là nơi chứa hình ảnh và media bạn đã tải lên trong suốt quá trình phát triển web. Đây là tài sản duy nhất trong mã nguồn (source code) mà chúng ta giữ lại. Các thư mục khác như wp-admin, wp-includes hay core files đều có thể tải lại từ WordPress.org.
Sử dụng File Manager của Hosting để nén (Zip) thư mục uploads và tải về máy tính.

3. Lưu danh sách Plugin/Theme và file cấu hình
Danh sách Plugin/Theme: Chụp ảnh màn hình thư mục /wp-content/plugins/ và /wp-content/themes/ để nhớ những gì cần cài đặt lại sau này.

File wp-config.php: Tải file này về máy.
Lưu ý: Chúng ta chỉ dùng file này để xem thông tin kết nối Database (DB Name, User, Password), tuyệt đối không sử dụng lại file này để upload lên server mới vì hacker thường chèn code độc vào đây.

Thư mục Languages (nếu có): Nếu bạn có các file việt hóa riêng trong /wp-content/languages/, hãy sao lưu chúng.
Bước 2: Kiểm tra và làm sạch dữ liệu
Sau khi đã tải dữ liệu về máy tính cá nhân (Localhost), chúng ta cần “phẫu thuật” để loại bỏ các tế bào ung thư (mã độc) trước khi đưa chúng trở lại môi trường sạch.
1. Làm sạch thư mục Uploads
Theo nguyên tắc bảo mật, thư mục uploads chỉ được phép chứa các file định dạng hình ảnh, video, tài liệu (như .jpg, .png, .pdf, .mp4). Nó không bao giờ được chứa các file thực thi mã lệnh như .php, .php5, .phtml, .py, .pl, .cgi.
Hành động:
- Giải nén file backup
uploadstrên máy tính. - Sử dụng tính năng tìm kiếm của Windows (File Explorer) hoặc Mac (Finder).
- Tìm kiếm từ khóa:
*.php. - Xóa thẳng tay tất cả các file
.phpđược tìm thấy trong thư mục này. Hacker thường giấu các file backdoor tại đây (ví dụ:image_resizer.php,config.phpẩn trong các folder năm/tháng).
2. Kiểm tra & Làm sạch Database
Mở file .sql vừa tải về bằng một trình soạn thảo code nhẹ như Notepad++ hoặc Sublime Text (không dùng Word hay Notepad thường vì file lớn sẽ bị treo).
Sử dụng tổ hợp phím Ctrl + F để tìm kiếm các dấu hiệu bất thường:
base64_decode: Hàm mã hóa thường dùng để giấu code độc.eval(: Hàm thực thi code PHP nguy hiểm.<script>: Các đoạn script chèn vào nội dung bài viết để redirect.<iframe>: Các khung hình ẩn tải mã độc từ trang khác.
Đặc biệt, hãy kiểm tra kỹ 2 bảng quan trọng:
- wp_users: Rà soát danh sách user, xóa ngay các dòng chứa user lạ mà bạn không nhận ra.
- wp_options: Tìm đến dòng
siteurlvàhome. Đảm bảo địa chỉ website vẫn đúng là domain của bạn, không bị đổi sang domain lạ.
Bước 3: Reset Hosting & Cài đặt lại mã nguồn (Re-installation)
Phương pháp Nuclear (Hạt nhân): Thay vì cố gắng gỡ từng dòng code độc trên mã nguồn cũ (rất dễ bỏ sót), chúng ta sẽ xóa bỏ hoàn toàn và xây dựng lại từ đầu. Đây là cách duy nhất đảm bảo sạch 100%.
1. Reset Hosting (Làm sạch môi trường)
Hãy liên hệ với bộ phận kỹ thuật của nhà cung cấp Hosting (nếu bạn đang sử dụng dịch vụ tại InterData, hãy gửi ticket ngay). Yêu cầu nhà cung cấp hỗ trợ Reset hosting về trạng thái mặc định.
Thao tác này sẽ xóa vĩnh viễn toàn bộ file và database hiện có trên host. Đồng thời, đây là lúc bạn bắt buộc phải đổi mật khẩu quản trị Hosting (cPanel/DirectAdmin) và mật khẩu tài khoản FTP. Nếu hacker đã có mật khẩu này, mọi nỗ lực làm sạch bên dưới đều vô nghĩa.
2. Cài đặt lại mã nguồn WordPress sạch
Truy cập trang chủ WordPress.org để tải về bản WordPress mới nhất. Giải nén và upload toàn bộ mã nguồn sạch này lên thư mục public_html của hosting.
Tuyệt đối không sử dụng lại bất kỳ file mã nguồn cũ nào (trừ thư mục uploads đã làm sạch).
Xem chi tiết tại Cách 1 của bài viết 3 Cách Cài Đặt WordPress Trên Hosting cPanel Đơn Giản
3. Khôi phục Database và Uploads
Sau khi đã có bộ mã nguồn WordPress sạch (“xác”), chúng ta cần đổ “hồn” (dữ liệu) vào lại. Hãy làm chậm và chính xác từng bước sau:
a. Tạo Database mới hoàn toàn
Đừng dùng lại Database cũ. Hãy vào trang quản trị Hosting (cPanel):
- Tìm mục Manage My Databases trên cPanel
- Tạo một Database Name mới (ví dụ:
new_wp_data). - Tạo một Database User mới và Mật khẩu cực mạnh (dùng trình tạo mật khẩu ngẫu nhiên).
- Quan trọng: Gán User vào Database vừa tạo và tích chọn “ALL PRIVILEGES” (Toàn quyền).

b. Nhập dữ liệu sạch (Import SQL)
- Quay lại phpMyAdmin.
- Ở cột bên trái, click chọn tên Database mới vừa tạo (lúc này đang rỗng).
- Nhấn vào tab Import (Nhập) trên thanh công cụ.
- Nhấn Choose File và chọn file
.sqlsạch đã xử lý ở Bước 2 trên máy tính. - Nhấn nút Go (Thực hiện) ở cuối trang. Đợi đến khi báo dòng chữ xanh “Import has been successfully finished”.

c. Khôi phục thư mục hình ảnh (Uploads)
- Sử dụng File Manager của cPanel để truy cập vào thư mục:
/public_html/wp-content/. - Tại đây, bạn sẽ thấy thư mục
uploadsmặc định của WordPress mới (thường chỉ chứa vài file mẫu). Hãy xóa nó đi hoặc đổi tên. - Nhấn nút Upload và tải lên file nén
uploads.zip(đã làm sạch) từ máy tính. - Sau khi tải xong, click chuột phải vào file zip và chọn Extract (Giải nén).
- Kiểm tra lại đường dẫn để đảm bảo ảnh nằm đúng vị trí:
/wp-content/uploads/năm/tháng/tên-ảnh.jpg.

4. Cài đặt lại Plugin và Theme
Đây là bước cần sự kỷ luật cao. Bạn cần cài đặt lại theme và plugin từ đầu:
- Với Theme/Plugin miễn phí: Chỉ tải trực tiếp từ kho WordPress.org trong Dashboard.
- Với Theme/Plugin trả phí: Đăng nhập vào trang chủ của nhà phát triển (ví dụ: Themeforest, Elementor…) để tải bản mới nhất.

5. Thiết lập lại wp-config.php an toàn
Đổi tên file wp-config-sample.php thành wp-config.php. Sau đó, mở file này lên và điền thông tin kết nối (DB Name, User, Password) của Database MỚI mà bạn vừa tạo ở Bước 3.3.a. Tuyệt đối không sử dụng thông tin của Database cũ.

Thay đổi Database Prefix (Tiền tố)
Tiền tố mặc định của WordPress thường là wp_. Hacker thường lợi dụng điều này để tấn công vào các bảng mặc định.
LƯU Ý QUAN TRỌNG: Giá trị này phải khớp chính xác với tiền tố của các bảng đang có trong Database (bạn có thể xem trong phpMyAdmin).
- Cách an toàn nhất (Khuyên dùng): Hãy nhập đúng tiền tố cũ (thường là
wp_) vào file config để website hoạt động bình thường trở lại trước. Sau đó ở Bước 5, bạn hãy dùng plugin bảo mật (như iThemes Security hoặc AIOWPS) để đổi tiền tố tự động. Cách này an toàn và tránh lỗi. - Cách thủ công (Nâng cao): Nếu bạn muốn đổi ngay bây giờ (ví dụ thành
wp_a1b2_), bạn bắt buộc phải vào phpMyAdmin và thực hiện đổi tên (Rename) cho từng bảng một (từwp_options→wp_a1b2_options, v.v.). Nếu không đồng bộ, website sẽ không tải được dữ liệu.
$table_prefix = 'wp_'; // Điền đúng với tiền tố hiện tại trong Database của bạn
Cập nhật Security Keys (SALT Keys)
Hacker có thể vẫn đang giữ cookie đăng nhập của bạn. Việc đổi Salt Keys sẽ vô hiệu hóa tất cả các phiên đăng nhập hiện tại, buộc mọi user (bao gồm cả hacker) phải đăng xuất.
Truy cập: https://api.wordpress.org/secret-key/1.1/salt/ để lấy bộ key ngẫu nhiên mới và dán đè vào phần tương ứng trong wp-config.php.
Dưới đây là ví dụ về giao diện bạn sẽ thấy (Lưu ý: Đây chỉ là ví dụ minh họa, hãy copy mã từ trang web generator để có bộ khóa ngẫu nhiên và bảo mật nhất):
define('AUTH_KEY', 'ciPmo2%_Ae~aSzuLC-x|N*ik]]h7/EX5~TKnA6Fhu;O4++pc;?bRe&t[0(/OOu+h');
define('SECURE_AUTH_KEY', '+pyuFeO`nP0_jHLok- cd#}4`hD_A>dH0@/&A7J^v[v?ZH,yQurcmg2bY#,[Tiy7');
define('LOGGED_IN_KEY', 'Wa`@:4kz!f_{!!~Sl/61+fh.vG14;SJgL;f n nbK%~-$7)y+|fN^z=Rs~0Thy6L');
define('NONCE_KEY', 'gRly+&+s5F$Pl_VEzKHhWWt)TA$xcAa5Ck9H7y3~ on]p9tcX9i38|j`%CwVg7Y(');
define('AUTH_SALT', 'aUY+|+;7b$=:1G[d8JN@&^g6PD6SovFqg:krbz4SD*D[vv!a< ;FBg-D_aU[)Qk+');
define('SECURE_AUTH_SALT', 'YuR8FEs9@f+)(K~35yeJj/X`!#O7*4<D)tKBRHKCyH?rx.|A|n<e]{fXe-[N=E&+');
define('LOGGED_IN_SALT', 'Bb?+ivV8-5T{urhO;rAe*E?,Y/TG[[}o_j9cXzzk`4~&0h%E /|EI,B~f_x_ZcUF');
define('NONCE_SALT', ' +!V+|!B3#>q29#,_vt;M*D?ezUL+|YKo8JO-)`47_%P=@[4MRpF|s:EbVT<y8u7');
Bước 4: Quét lại toàn bộ website (Rescan)
Sau khi website đã hoạt động trở lại, đừng chủ quan. Hãy thực hiện quét toàn diện để đảm bảo không còn tàn dư nào.
Công cụ tích hợp trên Hosting
Nếu bạn sử dụng Hosting tại InterData hoặc các nhà cung cấp uy tín, thường sẽ có sẵn Imunify360. Hãy truy cập cPanel, tìm Imunify360 và bật tính năng “Proactive Defense” (Phòng vệ chủ động) lên mức Kill mode để hệ thống tự động chặn các script độc hại.

Plugin quét mã độc chuyên dụng
- Wordfence Security: Plugin phổ biến nhất thế giới. Hãy cài đặt và chạy tính năng “Scan”. Vào phần Scan Options, bật chế độ “High Sensitivity” để quét sâu hơn.
- Anti-Malware Security (GOTMLS): Giao diện hơi cũ nhưng cực kỳ hiệu quả trong việc tìm diệt các dòng mã độc mới (Known Threats).
Công cụ kiểm tra online
Sử dụng Sucuri SiteCheck hoặc VirusTotal dán URL website vào để kiểm tra xem website còn nằm trong danh sách đen (Blacklist) của các hãng bảo mật như McAfee, Google, Norton hay không.
Bước 5: Bảo mật cho website WordPress
“Phòng bệnh hơn chữa bệnh”. Sau khi website đã sạch, hãy dựng ngay các hàng rào bảo vệ.
1. Thay đổi toàn bộ thông tin đăng nhập
Một lần nữa, hãy chắc chắn bạn đã đổi tất cả mật khẩu sang loại mật khẩu mạnh (trên 12 ký tự, bao gồm chữ hoa, thường, số và ký tự đặc biệt):
- Mật khẩu tài khoản Admin WordPress.
- Mật khẩu Database User.
- Mật khẩu tài khoản quản trị Hosting.
2. Cấu hình phân quyền file (File Permissions)
Sử dụng File Manager để kiểm tra quyền truy cập (CHMOD):
- Thư mục (Folders):
755 - Tệp tin (Files):
644 - File wp-config.php: Nên set chặt hơn là
440hoặc400để ngăn người khác đọc nội dung file này.

3. Cấu hình .htaccess chống chạy file lạ
Để ngăn chặn hacker upload file PHP vào thư mục uploads và kích hoạt nó, hãy tạo một file .htaccess trong thư mục /wp-content/uploads/ với nội dung sau:
<Files *.php>
deny from all
</Files>
Đoạn code này sẽ chặn việc thực thi bất kỳ file .php nào nằm trong thư mục hình ảnh.
4. Cài plugin bảo mật thường trực
Nếu bạn không rành kỹ thuật, hãy cài đặt All-in-One WP Security & Firewall hoặc iThemes Security. Các plugin này cung cấp giao diện trực quan để khóa IP tấn công, đổi đường dẫn đăng nhập (thay vì /wp-admin), và tường lửa cơ bản.
Những lưu ý để tránh tái nhiễm mã độc
Ngoài các biện pháp kỹ thuật nêu trên, trong quá trình vận hành website lâu dài, bạn cần tuyệt đối tuân thủ 4 nguyên tắc sau để tránh sự cố phát sinh lại:
- Sử dụng phần mềm bản quyền: Chỉ sử dụng Core, Plugin, Theme bản quyền hoặc miễn phí từ nhà cung cấp chính chủ (WordPress.org, Themeforest…). Tuyệt đối KHÔNG cài bản share, bản nulled từ bất cứ nguồn không xác định nào khác.
- Luôn cập nhật (Update): Luôn sử dụng phiên bản mới nhất của WordPress, Theme và Plugin. Các bản cập nhật thường chứa các bản vá lỗi bảo mật quan trọng.
- Quản lý mật khẩu chặt chẽ: Sử dụng mật khẩu Admin mạnh (bao gồm chữ hoa, thường, số, ký tự đặc biệt), thay đổi định kỳ và tuyệt đối không để lộ cho người không có phận sự.
- Cách ly môi trường phát triển: Không cài đặt các website test, demo với mật khẩu yếu hoặc mã nguồn không an toàn trên cùng một gói Hosting với website chính. Việc này giúp tránh rủi ro “lây nhiễm chéo” (Cross-site contamination) từ web test sang web chính.
Các câu hỏi thường gặp (FAQs)
Q1: Làm sao biết chính xác plugin nào gây ra mã độc?
A: Rất khó để xác định chính xác nếu bạn không có log (nhật ký) server chi tiết. Tuy nhiên, bạn có thể dùng Wordfence để xem ngày sửa đổi file (Modified date). Nếu file plugin bị sửa đổi vào thời điểm website bắt đầu lỗi, đó là nghi phạm chính. Plugin bị bỏ hoang (không update > 1 năm) thường là mục tiêu dễ bị tấn công nhất.
Q2: Có nên trả tiền cho các dịch vụ gỡ mã độc (như Sucuri) không?
A: Có, nếu bạn không rành kỹ thuật hoặc website của bạn là trang thương mại điện tử tạo ra doanh thu lớn mỗi ngày. Chi phí dịch vụ thường từ $199/năm, nhưng họ cam kết bảo hành và xử lý nhanh chóng. Nếu ngân sách hạn hẹp, hãy làm theo hướng dẫn này của InterData.
Q3: Tại sao tôi đã xóa mã độc nhưng vài ngày sau lại bị lại?
A: Đây là tình trạng “Tái nhiễm” (Re-infection). Nguyên nhân thường do:
- Chưa vá lỗ hổng (Backdoor) gốc: Bạn xóa file độc nhưng chưa xóa file backdoor bị hacker giấu kỹ.
- Chưa đổi mật khẩu hoặc chưa logout các phiên đăng nhập cũ (chưa đổi Salt Keys).
- Vẫn tiếp tục sử dụng theme/plugin nulled.
- Website khác trên cùng hosting bị nhiễm và lây lan sang (Cross-site contamination) – trường hợp này thường gặp ở các gói hosting giá rẻ không phân vùng tốt.
Q4: Web bị Google cảnh báo đỏ thì bao lâu mới hết?
A: Sau khi bạn chắc chắn website đã sạch, hãy truy cập Google Search Console, vào mục Security & Manual Actions (Bảo mật & Tác vụ thủ công) -> Security issues và nhấn nút Request Review (Yêu cầu xem xét lại). Quá trình này thường mất từ 24 đến 72 giờ để Google quét lại và gỡ bỏ cảnh báo.
Q5: Database có chứa mã độc không?
A: Có. Hacker ngày càng thông minh hơn. Chúng không chỉ upload file mà còn chèn các đoạn mã JavaScript độc hại vào nội dung bài viết (bảng wp_posts) hoặc tạo user admin ẩn (bảng wp_users). Do đó, làm sạch Database là bước bắt buộc.
Kết luận
Xử lý mã độc WordPress là một cuộc chiến không khoan nhượng. Không có website nào an toàn 100%, chỉ có website được bảo trì và giám sát thường xuyên. Quy trình 5 bước nêu trên của InterData tuy tốn thời gian và công sức (đặc biệt là bước cài mới) nhưng là giải pháp triệt để nhất để bảo vệ tài sản số của bạn.
Đừng quên thiết lập chế độ sao lưu tự động (Backup) hàng ngày bằng các plugin như UpdraftPlus hoặc sử dụng dịch vụ Hosting chất lượng cao có sẵn backup định kỳ tại InterData. Khi có bản backup sạch trong tay, bạn sẽ không bao giờ phải hoảng sợ trước bất kỳ cuộc tấn công nào.
Bạn cần hỗ trợ khẩn cấp?
Nếu bạn đang sử dụng dịch vụ tại InterData và gặp khó khăn trong quá trình xử lý, đừng ngần ngại liên hệ với chúng tôi.
Liên hệ InterData ngay
– WEBSITE: interdata.vn
– HOTLINE: 1900636822
– FANPAGE: facebook.com/interdata.com.vn
