Mã độc WordPress hiếm khi chỉ nằm ở một tệp. Một chiến dịch có thể dùng tệp PHP để thực thi, database để chèn nội dung, cron để tự phục hồi và tài khoản quản trị để giữ quyền truy cập. Vì vậy, “máy quét báo sạch” không đồng nghĩa toàn bộ hệ thống đã sạch.
Bốn lớp cần kiểm tra cùng nhau
WebAnToan chia phạm vi thành tệp, database, tác vụ nền và danh tính. Cách chia này giúp đội xử lý không dừng lại sau khi thấy một tệp bị nhiễm và có thể nối các dấu vết thành timeline.
1. Tệp: core, plugin, theme và uploads
Core nên khớp với bản chính thức. Plugin và theme cần có nguồn phát hành rõ ràng. Trong uploads, tệp hình ảnh và tài liệu là bình thường; PHP, file ẩn hoặc tên giống ảnh nhưng thực thi được cần điều tra. Ngoài ra hãy kiểm tra .htaccess, index.php, wp-config.php, mu-plugins và các drop-in như object-cache.php.
2. Database: nội dung và cấu hình có thể bị chèn
Script lạ có thể nằm trong bài viết, widget, options, nội dung header/footer của plugin hoặc trường cấu hình đã bị sửa. Tài khoản người dùng và capability cũng lưu trong database. Khi tìm kiếm, cần dùng bản sao và câu lệnh chỉ đọc trước; tránh thay thế hàng loạt khiến dữ liệu serialization bị hỏng.
3. Cron và tác vụ nền
WP-Cron, cron của hosting và system cron có thể gọi URL, tải tệp hoặc chạy script theo lịch. Một tác vụ persistence có thể khôi phục backdoor vài phút sau khi đội kỹ thuật xóa nó. Hãy ghi lại hook, lịch chạy, callback và chủ sở hữu trước khi vô hiệu hóa.
4. Tài khoản, khóa và phiên đăng nhập
Rà Administrator, tài khoản hosting, SSH/SFTP, database, email khôi phục, CDN và DNS. Một tài khoản hợp lệ bị lộ có thể không trông “đáng ngờ” trên danh sách. Cần đối chiếu người sở hữu, thời điểm đăng nhập, IP và nhu cầu thực tế; thu hồi tài khoản không còn dùng.
Một tệp mới lúc 02:14, request POST bất thường lúc 02:13 và cron tạo lúc 02:15 có giá trị hơn ba phát hiện rời rạc. Timeline giúp ưu tiên giả thuyết về điểm vào.
Thứ tự rà soát đề xuất
- Chụp snapshot và lấy log trước khi thay đổi.
- Liệt kê người dùng, plugin, theme, cron và tệp mới sửa.
- So sánh core/plugin/theme với nguồn sạch đáng tin.
- Rà uploads, cấu hình web server, database và tác vụ nền.
- Thay mã nguồn sạch, thu hồi quyền và vá điểm vào.
- Quét lại, kiểm thử nghiệp vụ và theo dõi thay đổi sau mở lại.
Điều gì không nên làm?
Không chạy một lệnh tìm-xóa trên toàn bộ database, không cấp quyền 777 để “sửa lỗi”, không giữ plugin nulled và không khôi phục backup chưa biết thời điểm nhiễm. Những thao tác đó có thể tạo lỗi mới hoặc giữ nguyên đường xâm nhập.
Nguồn tham khảo chính thức
Tài liệu WordPress khuyến nghị kiểm tra cả tệp, quyền truy cập, backup và môi trường hosting: FAQ My site was hacked và Hardening WordPress.
Mã độc không tôn trọng ranh giới thư mục WordPress
Đội ngũ thường chỉ quét plugin/theme, trong khi persistence có thể nằm ở mu-plugins, uploads, thư mục cha, cron hệ thống, database hoặc một website khác cùng account hosting.
Phạm vi điều tra cần theo quyền, không theo đường dẫn
Nếu user PHP có thể ghi sang site bên cạnh, toàn bộ account là phạm vi. Nếu credential hosting bị lộ, backup, mailbox và DNS cũng cần rà. Một site được dọn sạch nhưng nguồn lây chung còn tồn tại sẽ nhiễm lại.
Bản đồ tìm kiếm thực tế
- Core, plugin, theme, mu-plugins và drop-ins.
- Uploads, cache, tmp và file ngoài webroot.
- Database options/posts/users và scheduler.
- Control panel, SSH keys, cron và website cùng owner.
Ghi phần đã kiểm tra và phần chưa có quyền truy cập để báo cáo không tạo cảm giác chắc chắn giả.
Tiếp tục theo quy trình ứng cứu
Các bài trong cụm này đi từ nhận biết đến xử lý và phòng tái nhiễm.
Câu hỏi thường gặp
Thư mục uploads có được chứa tệp PHP không?
Phần lớn website không cần PHP trong uploads; tệp thực thi ở đây cần được điều tra và chặn phù hợp với cấu hình.
Mã độc có thể chỉ nằm trong database không?
Có. Script chèn, nội dung spam, tài khoản và một số cấu hình có thể nằm trong database.
WP-Cron có thể làm website nhiễm lại không?
Một tác vụ độc hại có thể tái tạo tệp hoặc gọi mã từ xa, nên cron cần nằm trong phạm vi kiểm tra.
Cần kiểm tra website theo hiện trạng thực tế?
WebAnToan có thể rà dấu hiệu, khoanh vùng phạm vi và đề xuất thứ tự xử lý phù hợp với website của bạn.
Kết nối access log, tệp, database, cron và tài khoản thành một timeline có thể kiểm chứng.



