Ảnh đại diện: WordPress bị chèn mã độc: 9 bước xử lý và chặn tái nhiễm

WordPress bị chèn mã độc xử lý theo chín bước: sao lưu nguyên trạng, soi tài khoản quản trị và bài lạ, kiểm checksum, tìm tệp lạ, thay lõi, đổi mọi khoá, bịt đường vào, quét lại, xin Google xem xét. Bỏ bước bịt đường vào thì site thường bị lại: ca Net Solutions đo được có tài khoản quản trị giả mọc lại sau cả lần dọn lẫn lần đổi mật khẩu. Cuối bài có bảng chỉ ra việc nào tự làm được, việc nào nên thuê.

Dấu hiệu site đã bị chèn mã độc

Chỉ cần một dấu hiệu mà chỉ khách thấy, còn quản trị viên không thấy, là đã đủ nghi. Mã độc hay giấu mình với người đang đăng nhập để chủ site khó phát hiện.

Dấu hiệu Chỗ kiểm
Khách bị chuyển sang trang lạ, bạn vào thì bình thường Mở site bằng điện thoại không đăng nhập, hoặc cửa sổ ẩn danh
Có tài khoản quản trị bạn không tạo Trang Người dùng, lọc vai trò Quản trị viên
Có bài hoặc trang lạ, nội dung cờ bạc, thuốc, hàng giả Danh sách bài, sắp theo ngày sửa chứ không theo ngày đăng
Tiêu đề trên Google hiện chữ lạ Gõ site:tênmiền trên Google và đọc kết quả
Google cảnh báo trang không an toàn Search Console, mục Bảo mật và hành động thủ công
Form liên hệ hoặc thư gửi đi hỏng Gửi thử một thư, xem hộp thư rác và nhật ký mail
Site chậm hẳn dù không đổi gì Đo lại tốc độ, đối chiếu với tuần trước

Một dấu hiệu chưa chứng minh được site bị nhiễm, nhưng mỗi dấu hiệu đều đáng mở bước sao lưu bên dưới.

Một số dấu hiệu trùng với việc site cần bảo trì thường xuyên; xem bảo trì website là gì để phân biệt site đang xuống cấp với site đã bị chiếm.

15 phút đầu: giữ nguyên hiện trường

Việc đầu tiên là sao lưu, chưa phải xoá. Bản sao lưu nguyên trạng là bằng chứng để tìm đường vào ở bước 8.

  • Ghi lại giờ phát hiện và dấu hiệu đầu tiên bạn thấy.
  • Nếu được, đặt trang bảo trì hoặc khoá truy cập để khách khỏi bị chuyển sang trang lạ.
  • Sao lưu cả tệp lẫn cơ sở dữ liệu đúng như đang có, kể cả phần bạn nghi là mã độc.
  • Chưa xoá gì khi bản sao lưu chưa xong và chưa kiểm lại.

Bản sao lưu này không dùng để khôi phục khi bạn chưa biết site bị nhiễm từ ngày nào. Khôi phục về một bản đã nhiễm chỉ đưa mã độc quay lại. Muốn khôi phục, cần bản sao lưu có trước ngày nhiễm, và vẫn phải bịt đường vào.

Sơ đồ năm chặng xử lý WordPress bị chèn mã độc: giữ hiện trường, soi admin và tệp lạ, thay lõi và đổi khoá, bịt đường vào, quét lại và xin Google xem xét
Chín bước gom thành năm chặng: nửa đầu để hiểu chuyện gì đã xảy ra, nửa sau để dọn và bịt.

Đếm tài khoản quản trị và bài lạ

Con số quản trị viên cho biết nhiều hơn danh sách tệp. Vào Người dùng, lọc vai trò Quản trị viên, và đối chiếu từng tên với người bạn biết.

Với bài viết, sắp theo ngày sửa (modified), không theo ngày đăng. Kẻ tấn công thường ghi lùi ngày đăng để bài mồi chìm xuống cuối danh sách; ngày sửa thì khó giả hơn.

Ví dụ từ ca Net Solutions đo ngày 10/09/2026 (đã ẩn tên khách): một site bị chiếm quyền ghi liên tục 20 ngày mà không ai biết. Site có 47 tài khoản quản trị giả. Sáu bài mồi đặt ngày đăng lùi về 01/01/2020, xếp theo ngày đăng thì không thấy, chỉ cột ngày sửa mới lộ ra.

Nếu quen dòng lệnh, WP-CLI liệt kê được quản trị viên bằng wp user list --role=administrator --fields=ID,user_login,user_email,user_registered. Chưa xoá tài khoản nào ở bước này: ghi lại tên, email, giờ tạo, rồi để dành cho bước 7.

Kiểm lõi và plugin bằng checksum

Checksum so tệp lõi và plugin trên site với bản gốc ở wordpress.org. Tệp nào bị sửa hoặc thừa ra sẽ bị báo.

  • wp core verify-checksums kiểm tệp lõi WordPress.
  • wp plugin verify-checksums --all kiểm mọi plugin có trên wordpress.org.

Cả hai lệnh nằm trong tài liệu WP-CLI chính thức (developer.wordpress.org/cli/commands, đối chiếu ngày 08/10/2026). Plugin không có trên wordpress.org, hoặc mua ngoài, sẽ không kiểm được bằng cách này.

Lưu ý: checksum sạch không có nghĩa site sạch. Lệnh chỉ so tệp lõi và plugin với wordpress.org. Nó không nhìn thấy theme tự viết, thư mục uploads, lịch chạy tự động, cơ sở dữ liệu, hay tài khoản được tạo qua một lỗ hổng. Ca ở bước 8 có checksum sạch mà site vẫn bị chiếm.

Tìm thứ checksum không thấy

Mã độc thường nằm ở những chỗ không thuộc lõi hay plugin chính thức. Năm chỗ dưới đây đáng soi trước.

Vị trí Tìm gì Làm gì khi thấy
wp-content/uploads/ Tệp có đuôi .php; thư mục này chỉ nên chứa ảnh và tài liệu Ghi tên tệp vào biên bản, xoá sau khi đã sao lưu
wp-content/mu-plugins/ Tệp bạn không cài; mã ở đây tự chạy mà không hiện trong danh sách plugin Giữ lại nếu chính bạn đặt, xoá nếu không rõ nguồn
.htaccess và wp-config.php Dòng chuyển hướng lạ, đoạn mã dài bị mã hoá, dòng nạp tệp từ nơi khác So với bản gốc, trả về nội dung chuẩn
Lịch chạy tự động (cron) Tác vụ có tên lạ, hoặc gọi một địa chỉ ngoài; xem bằng wp cron event list (cột hook và next_run_gmt) Xoá tác vụ lạ, ghi lại tên
functions.php của theme và cơ sở dữ liệu Chuỗi eval, base64_decode; tìm trong CSDL bằng wp db search base64_decode --all-tables Gỡ đoạn chèn; nếu theme nhiễm nặng thì cài lại

Danh sách này là điểm bắt đầu, không phải bản liệt kê đầy đủ. Mã độc có thể nằm ở nơi khác.

Tìm không thấy gì cũng chưa chứng minh được là sạch. Phép tìm chỉ cho biết chỗ vừa soi không có gì. Vì thế bước 8 mới là bước quyết định site có bị lại hay không.

Thay lõi, cài lại plugin và theme từ nguồn gốc

Đừng vá từng tệp nghi nhiễm. Thay cả lõi, cài lại plugin và theme từ nguồn chính thức rồi so lại.

  • Thay lõi WordPress bằng bản mới nhất từ wordpress.org, giữ nguyên wp-config.php và wp-content/uploads sau khi đã kiểm hai chỗ này.
  • Xoá plugin và theme không dùng: bản bỏ quên thường lỗi thời và là chỗ kẻ tấn công hay lợi dụng.
  • Cài lại những plugin còn dùng từ nguồn của tác giả, đúng bản đang chạy hoặc mới hơn.

Một điều không nên làm: dùng plugin hoặc theme bẻ khoá (nulled). Đây là nguồn mã độc phổ biến, và nếu site từng dùng loại này thì cài lại cũng chỉ đem mã độc quay về.

Đổi mọi khoá

Đổi khoá sau khi đã dọn, và trước khi đổi hãy đóng đường vào ở bước 8. Nếu đường vào còn mở, kẻ tấn công vẫn tạo lại tài khoản mới và các mật khẩu vừa đổi coi như chưa đổi.

Khoá Việc cần làm
Mật khẩu quản trị WordPress Đặt mật khẩu mới dài và riêng cho từng tài khoản còn giữ
Mật khẩu cơ sở dữ liệu Đổi ở hosting, rồi cập nhật trong wp-config.php
FTP, SSH và tài khoản hosting Đổi cả mật khẩu lẫn khoá SSH nếu có
Bộ khoá bí mật trong wp-config.php Tạo bộ mới (wp config shuffle-salts làm được việc này, cần wp-config.php ghi được); mọi phiên đăng nhập đang mở sẽ bị đăng xuất
Tài khoản quản trị lạ Xoá sau khi đã sao lưu và ghi lại thông tin ở bước 3

Cách đổi mật khẩu quản trị chi tiết ở bài hướng dẫn đổi mật khẩu quản trị website.

Tìm và bịt đường vào

Đa số hướng dẫn dừng ở việc xoá tệp độc. Nhưng xoá chưa trả lời câu hỏi mã độc vào bằng đường nào, và chừng nào đường đó còn mở thì site bị lại.

Tự hỏi ba câu, bằng bản sao lưu nguyên trạng ở bước 2:

  • Plugin hoặc theme nào lỗi thời vào lúc site bị nhiễm?
  • Mật khẩu nào từng bị lộ, dùng chung với nơi khác, hoặc đặt quá đơn giản?
  • Lõi WordPress có lỗ hổng chưa vá vào thời điểm đó không?

Ca thật từ Net Solutions. Có một site, sau khi dọn sạch rồi đổi mật khẩu, tài khoản quản trị giả vẫn mọc lại. Hai lần đầu, chúng tôi đọc ra “cửa hậu trong tệp” vì tài khoản giả quay lại. Nhưng kiểm tệp và checksum đều sạch. Nhật ký truy cập mới cho câu trả lời: kẻ tấn công gọi vào một đầu REST API mở cho khách vãng lai, và đầu đó tạo được tài khoản quản trị mà không cần mật khẩu, không cần tệp lạ nào.

Lỗ hổng cùng kiểu có thật trên lõi WordPress, không cần plugin lạ: xem lỗ hổng WP2Shell và CVE-2026-87902 để biết cách nhận ra và cách vá. Hai bài đó nói về phòng; bài này nói về chữa.

Việc cần làm ở bước này: cập nhật lõi, plugin, theme lên bản mới nhất; gỡ cái không dùng; đóng cửa REST với khách vãng lai nếu bạn không cần; và theo dõi nhật ký vài ngày sau để chắc chắn không có tài khoản hay tệp mới mọc lại.

Quét lại và xin Google xem xét

Quét lại trên trang thật, đừng chỉ tin báo cáo của plugin. Mở site ở cửa sổ ẩn danh bằng cả máy tính lẫn điện thoại, đi qua trang chủ, bài viết, trang liên hệ và kiểm xem còn chuyển hướng lạ không. Rồi chạy lại bước 3 đến 5 một lần nữa.

Nếu Search Console báo “Vấn đề bảo mật”, bấm Yêu cầu xem xét và mô tả từng loại vấn đề bạn đã dọn. Chỉ gửi khi đã sạch thật: yêu cầu gửi khi còn mã độc có thể bị từ chối và phải đợi lần xem xét sau. Theo hướng dẫn của Google Search Central, với cảnh báo mã độc, việc xem xét có thể xong trong khoảng một ngày, nhưng không có cam kết giờ cụ thể.

Tự làm hay thuê

So sánh việc tự xử lý được và việc nên thuê khi WordPress bị chèn mã độc, theo tầng WordPress và tầng tệp
Ranh giới thường nằm giữa tầng WordPress và tầng tệp.
Tầng Dấu hiệu Ai xử lý
WordPress Bài, trang, plugin hoặc tài khoản quản trị lạ; nội dung bị sửa Tự làm được nếu có bản sao lưu và làm đúng thứ tự trên
Cửa REST và cấu hình Tài khoản giả mọc lại dù đã đổi mật khẩu; không thấy tệp lạ Nên thuê: đo từ bên ngoài, đóng bằng cấu hình máy chủ
Tệp trên máy chủ Tệp .php lạ trong uploads, cron lạ, mã độc trong theme hoặc plugin Nên thuê: cần quyền hệ thống trên máy chủ

Cách chia theo quy trình kiểm tra bảo mật nội bộ của Net Solutions.

Cũng nên thuê khi site chạy quảng cáo hoặc bán hàng, vì mỗi giờ chậm trễ là tiền quảng cáo và đơn hàng; khi có nhiều site cùng nằm trên một máy chủ; hoặc khi bạn không có quyền vào hosting để sao lưu và kiểm tệp.

Net Solutions không xử lý được khi không có quyền vào hosting hoặc máy chủ của site. Chúng tôi cũng không hứa gỡ cảnh báo Google đúng một ngày, vì việc đó do Google quyết. Và dọn xong chưa bằng không bị lại nếu đường vào chưa đóng.

Nếu site chỉ cần theo dõi đều đặn để không đến mức này, xem dịch vụ chăm sóc website.

Net Solutions làm gì

Gói chăm sóc website của Net Solutions có ba mức: C1 1.500.000đ, C2 2.500.000đ, C3 3.500.000đ mỗi tháng. Các gói gồm quét bảo mật, sao lưu và phát hiện mã độc. Chúng tôi nhận chăm sóc site do đơn vị khác làm, kiểm toàn bộ site trong tháng đầu, và tính theo tháng, không ràng buộc dài hạn. Giá ghi nhận ngày 08/10/2026 từ trang dịch vụ; chi tiết từng gói xem ở trang đó.

Site đang bị chèn mã độc: gọi 0906.207.001 hoặc nhắn Zalo cùng số, kèm tên miền và dấu hiệu bạn thấy. Chúng tôi cần quyền vào hosting để sao lưu và kiểm tệp.

Câu hỏi thường gặp

WordPress bị chèn mã độc có dấu hiệu gì? Hay gặp nhất là khách bị chuyển sang trang lạ trong khi quản trị viên không thấy, tài khoản quản trị bạn không tạo, bài lạ, tiêu đề lạ trên Google, hoặc Google cảnh báo trang không an toàn. Chỉ cần một dấu hiệu ở dạng chỉ khách thấy là đủ để bắt đầu sao lưu và kiểm tra.

Tôi có tự xử lý được không, mất bao lâu? Phần tầng WordPress như bài, plugin và tài khoản lạ thì tự làm được nếu có bản sao lưu. Phần tệp trên máy chủ nên nhờ người có quyền hệ thống. Thời gian tuỳ mức nhiễm và số lượng tệp, nên chúng tôi không đưa số giờ cụ thể.

Plugin quét mã độc có đủ không? Các plugin quét bảo mật, như Wordfence hay Sucuri, tìm được phần lớn mã độc đã biết và là điểm bắt đầu tốt. Nhưng quét không thay được bước bịt đường vào và không bắt được tài khoản tạo qua lỗ hổng. Dùng như một công cụ, không phải kết luận.

Vì sao dọn xong site lại bị nhiễm lại? Thường vì đường vào chưa đóng, hoặc còn sót tài khoản, tệp, tác vụ cron lạ. Ca Net Solutions có tài khoản giả mọc lại sau cả lần dọn và lần đổi mật khẩu, nguyên nhân là một đầu REST API mở, không phải tệp độc.

Cần đổi những mật khẩu nào? Mật khẩu quản trị WordPress, mật khẩu cơ sở dữ liệu, FTP, SSH và tài khoản hosting, cộng bộ khoá bí mật trong wp-config.php để đăng xuất mọi phiên. Đổi sau khi đã đóng đường vào, nếu không kẻ tấn công vẫn tạo lại được tài khoản.

Bao lâu thì Google gỡ cảnh báo? Sau khi bạn gửi yêu cầu xem xét trong Search Console. Với cảnh báo mã độc, Google nói việc xem xét có thể nhanh, khoảng một ngày, nhưng không đảm bảo. Chỉ gửi khi đã sạch thật để tránh bị từ chối.

Khôi phục từ bản sao lưu cũ có được không? Được, nếu bạn biết ngày site bị nhiễm và bản sao lưu có trước ngày đó. Nếu không biết ngày, khôi phục có thể đưa mã độc quay lại. Dù khôi phục hay không, vẫn phải bịt đường vào, nếu không site sẽ bị lại.

Cập nhật 08/10/2026 bởi Công ty TNHH Net Solutions.

Gọi ngay Chat Zalo Messenger Facebook Hỗ trợ qua Email