Website WordPress bị xâm nhập hiếm khi báo lỗi to. Phần lớn trường hợp chỉ lộ ra qua những dấu hiệu nhỏ: một kết quả lạ trên Google, một tài khoản quản trị bạn không tạo, một tệp PHP nằm trong thư mục ảnh. Bài này là danh sách 10 việc chỉ đọc, không sửa gì, xếp theo thứ tự từ nhanh đến sâu, để bạn biết trong khoảng 15 phút liệu website có đáng ngờ hay không trước khi quyết định làm sạch.
Kiểm tra theo ba lớp. Lớp ngoài, không cần đăng nhập: tìm site:tênmiền trên Google, mở trang bằng điện thoại từ kết quả Google, xem Search Console báo gì. Lớp trong WordPress: danh sách quản trị viên, plugin và theme lạ, Site Health. Lớp máy chủ: so khớp tệp lõi với bản gốc, tìm tệp PHP trong thư mục uploads, tệp sửa gần đây, tác vụ cron và .htaccess. Chỉ cần một dấu hiệu rõ ràng là đủ lý do sao lưu ngay và chuyển sang quy trình xử lý, không nên tiếp tục “dọn thử” khi chưa có bản sao lưu.
Trước khi kiểm tra, cần chuẩn bị gì?
Bạn cần ba thứ: tài khoản quản trị WordPress, quyền vào Google Search Console của website, và nếu được thì quyền SSH hoặc trình quản lý tệp của hosting. Không có quyền máy chủ vẫn làm được các bước 1 đến 6; bước 7 đến 10 cần quyền máy chủ.
- Chỉ đọc và ghi chép. Chưa xóa tệp, chưa đổi mật khẩu hàng loạt, chưa cài lại WordPress.
- Chụp màn hình hoặc ghi lại từng phát hiện, kèm giờ. Đây là bằng chứng để biết xâm nhập bắt đầu từ lúc nào.
- Nếu website đang bán hàng hoặc thu thông tin khách, hãy nhớ có thể có nghĩa vụ báo khi lộ dữ liệu; phần này có trong bài website bị hack phải làm gì.
Lớp 1: kiểm tra từ bên ngoài, không cần đăng nhập
1. Gõ site: trên Google có trang lạ nào không?
Tìm site:tênmiền.com rồi lướt các kết quả. Dấu hiệu đáng ngờ là tiêu đề bằng ngôn ngữ khác, tiêu đề về thuốc, cờ bạc, hàng hiệu giả, hoặc hàng trăm trang có địa chỉ dạng chuỗi ký tự ngẫu nhiên mà bạn chưa từng tạo. Thử thêm các từ như site:tênmiền.com casino hoặc site:tênmiền.com cờ bạc. Nếu thấy, hãy xem tiếp bài website bị chèn từ khóa cờ bạc để phân biệt với spam từ ô tìm kiếm nội bộ.
2. Mở website từ kết quả Google bằng điện thoại, có bị chuyển trang không?
Một kiểu xâm nhập phổ biến là chỉ chuyển hướng khách đến từ Google hoặc khách dùng điện thoại, còn chủ website gõ thẳng địa chỉ thì vẫn thấy bình thường. Vì vậy hãy tìm website của bạn trên Google bằng điện thoại, trong tab ẩn danh, rồi bấm vào kết quả. Nếu bị đưa sang trang khác, đọc bài website chỉ chuyển hướng khi vào từ Google.
3. Search Console có báo vấn đề bảo mật hoặc hành động thủ công không?
Vào Search Console, mở mục Bảo mật và Hành động thủ công. Theo trang trợ giúp về báo cáo Hình phạt thủ công, đây là nơi Google thông báo khi trang vi phạm nguyên tắc; còn trang trợ giúp về nhãn nguy hiểm trong kết quả tìm kiếm giải thích vì sao một trang bị gắn cảnh báo. Không thấy thông báo không có nghĩa là an toàn, vì Google chưa chắc đã phát hiện, nhưng thấy thông báo thì gần như chắc chắn cần xử lý. Quy trình gỡ cảnh báo có ở bài website bị Google cảnh báo nguy hiểm.
Lớp 2: kiểm tra trong khu quản trị WordPress
4. Có quản trị viên hoặc mật khẩu ứng dụng nào bạn không tạo?
Vào Người dùng, lọc vai trò Quản trị viên. Mỗi tài khoản phải là người bạn nhận ra. Tài khoản có tên giống hệ thống (ví dụ tên chứa “wp”, “admin”, “support”) nhưng bạn không tạo là dấu hiệu cần ghi lại. Mở thêm hồ sơ của từng quản trị viên, kéo xuống mục Mật khẩu ứng dụng, xem có mật khẩu nào bạn không cấp không, vì kẻ xâm nhập có thể giữ đường vào ngay cả sau khi bạn đổi mật khẩu đăng nhập.
5. Plugin và theme: có cái nào bạn không cài, không còn cập nhật, hoặc là bản crack?
Vào Plugin đã cài đặt và Giao diện. Với mỗi mục, hỏi ba câu: bạn có biết nó làm gì không, nó còn được tác giả cập nhật không, và nó cài từ nguồn nào. Plugin hoặc theme “nulled” (bản bẻ khóa lấy từ nơi không chính thức) là nguồn lây mã độc quen thuộc. Plugin bị tác giả bỏ rơi nhiều năm cũng đáng ngờ, vì lỗ hổng không còn được vá. Mở thêm Công cụ, Tình trạng website (Site Health) để xem WordPress cảnh báo gì về phiên bản PHP, plugin lỗi thời hay tệp có thể ghi.
Nếu danh sách trên làm bạn thấy rối hoặc đã thấy từ hai dấu hiệu trở lên, bạn có thể gửi link website qua Zalo 0332 942 567 để được xem nhanh; dịch vụ xử lý mã độc WordPress làm phần kiểm tra và làm sạch trên máy chủ.
6. Có bài viết, trang hoặc menu lạ trong khu quản trị không?
Vào Bài viết, Trang, Menu, mục Trang phụ (widget) và sắp xếp theo ngày sửa đổi gần nhất. Tìm nội dung bạn không viết, đặc biệt là liên kết ẩn ở chân trang, trong widget văn bản hoặc trong trường Mã tùy chỉnh của theme. Một số mã độc không tạo bài mà chỉ chèn thẻ script hoặc iframe vào các trường này.
Lớp 3: kiểm tra trên máy chủ
Các lệnh dưới đây đều chỉ đọc. Chạy trong thư mục gốc của website. Nếu hosting không cho SSH, nhờ nhà cung cấp hosting hoặc kỹ thuật viên chạy giúp.
7. Tệp lõi WordPress và plugin có khớp bản gốc không?
WP-CLI có lệnh so sánh tệp lõi với tổng kiểm tra chính thức từ wordpress.org, xem tài liệu wp core verify-checksums. Với plugin lấy từ kho wordpress.org có lệnh tương tự, xem wp plugin verify-checksums.
wp core verify-checksums
wp plugin verify-checksums --all
wp user list --role=administrator
Tệp được báo “không khớp” hoặc “không phải của WordPress” nằm trong thư mục lõi là dấu hiệu cần điều tra. Lưu ý lệnh này không bắt được mã độc nằm trong wp-content ngoài các plugin có trong kho chính thức, nên phải làm tiếp các bước sau.
8. Có tệp PHP nào nằm trong thư mục uploads không?
Thư mục wp-content/uploads chỉ nên chứa ảnh, tài liệu và tệp media. Tệp .php ở đây hầu như luôn là điều bất thường, vì đó là chỗ kẻ xâm nhập hay đặt cửa hậu sau khi tận dụng một lỗ hổng tải tệp lên.
find wp-content/uploads -type f -name "*.php"
find . -type f -name "*.php" -mtime -7 -not -path "./wp-content/cache/*"
Dòng đầu liệt kê mọi tệp PHP trong uploads; một số plugin tạo tệp index.php chỉ chứa dòng chú thích, tệp đó bình thường. Dòng thứ hai liệt kê tệp PHP sửa trong 7 ngày gần đây (bỏ thư mục cache). Nếu gần đây bạn vừa cập nhật plugin thì kết quả sẽ có tệp hợp lệ, vì vậy hãy đối chiếu với lịch cập nhật của chính bạn, không kết luận chỉ từ danh sách.
9. Tệp cấu hình và thư mục đặc biệt có gì lạ không?
Mở bằng chế độ chỉ xem các tệp .htaccess ở gốc website, wp-config.php và thư mục wp-content/mu-plugins (nếu có). Chú ý các dòng chuyển hướng bạn không đặt, đoạn mã dài bị mã hóa, hoặc plugin trong mu-plugins mà bạn không biết. Thư mục mu-plugins tự được nạp, không hiện đầy đủ trong danh sách plugin thường, nên dễ bị lợi dụng để cài mã ẩn. Hướng dẫn tăng cường bảo mật chính thức nằm ở tài liệu Hardening WordPress.
10. Có tác vụ định kỳ hoặc email gửi đi bất thường không?
Liệt kê các tác vụ cron của WordPress bằng wp cron event list và tìm tên hàm bạn không nhận ra, hoặc tác vụ chạy rất dày mà không thuộc plugin nào bạn cài. Đồng thời xem hosting có báo hàng đợi thư đi tăng đột biến, tài nguyên CPU tăng không rõ lý do, hoặc khách phản hồi nhận thư lạ từ tên miền của bạn không. Các dấu hiệu này cho biết website có thể đang bị dùng để gửi thư rác hoặc đào tiền ảo.
Đọc kết quả: bao nhiêu dấu hiệu thì coi là bị hack?
| Phát hiện | Mức nghi ngờ | Việc nên làm tiếp |
|---|---|---|
| Trang lạ trên Google, chuyển hướng từ Google, hoặc cảnh báo trong Search Console | Cao | Sao lưu ngay, đọc quy trình xử lý, cân nhắc nhờ kỹ thuật viên |
| Quản trị viên hoặc mật khẩu ứng dụng lạ | Cao | Ghi lại, sao lưu, xử lý cùng lúc với tìm cửa hậu; không chỉ xóa tài khoản |
| Tệp PHP trong uploads, tệp lõi không khớp | Cao | Giữ nguyên bản sao để điều tra, rồi làm sạch có kiểm soát |
| Plugin nulled hoặc bỏ rơi, chưa thấy dấu hiệu nào khác | Trung bình | Thay bằng bản chính thức, rà lại sau 1 đến 2 tuần |
| Chỉ một cảnh báo nhẹ của Site Health, không dấu hiệu nào khác | Thấp | Cập nhật theo lịch, theo dõi tiếp |
Một dấu hiệu duy nhất có thể là lỗi cấu hình hoặc xung đột plugin thông thường. Nhưng hai dấu hiệu độc lập trở lên, hoặc bất kỳ dấu hiệu “Cao” nào, thì nên coi website đang có sự cố bảo mật cho đến khi chứng minh được ngược lại. Phần kiểm tra bằng công cụ quét tự động và cách đọc báo cáo quét có ở bài quét mã độc WordPress.
Kiểm tra xong, nếu nghi ngờ thì làm gì trước?
- Sao lưu nguyên trạng cả tệp và database, lưu ở nơi tách khỏi máy chủ. Cách làm có ở bài backup website định kỳ. Bản sao này giữ bằng chứng, không phải bản để khôi phục.
- Đổi mật khẩu theo thứ tự: hosting hoặc SSH, database, tài khoản quản trị WordPress, rồi các khóa trong
wp-config.php. Đổi từ bên ngoài vào trong, nếu không kẻ xâm nhập có thể lấy lại. - Cập nhật có kiểm soát lõi, plugin, theme sau khi đã sao lưu; xem thứ tự an toàn ở bài cập nhật WordPress an toàn.
- Làm sạch và tìm lối vào. Chỉ xóa mã độc mà không tìm lỗ hổng đã cho nó vào thì thường bị nhiễm lại. Đây là phần nên nhờ người có kinh nghiệm nếu bạn chưa từng làm.
- Củng cố sau sự cố: 2FA cho quản trị, bỏ plugin không dùng, lịch sao lưu và lịch quét. Bốn nhóm việc ưu tiên nằm trong bài cách bảo mật website tránh bị hack.
Về nguyên tắc chung, Google cũng có tài liệu tổng quan về các vấn đề bảo mật và cách chủ website xử lý tại Google Search Central, mục Bảo mật.
Khi nào nên dừng tự kiểm tra và nhờ kỹ thuật viên?
- Website đang bán hàng hoặc thu thông tin khách: mỗi giờ để nguyên là thêm rủi ro lộ dữ liệu.
- Bạn không có quyền máy chủ để làm bước 7 đến 10: kiểm tra mới được nửa chặng.
- Đã làm sạch một lần nhưng triệu chứng quay lại: thường còn cửa hậu hoặc lỗ hổng chưa vá.
- Không có bản sao lưu sạch: càng cần làm cẩn thận, tránh “dọn thử” gây mất dữ liệu.
Nếu cần, gửi link website và mô tả dấu hiệu bạn thấy qua Zalo 0332 942 567; chi tiết quy trình nằm ở trang xử lý mã độc WordPress. Với website muốn có người theo dõi cập nhật và sao lưu đều đặn, xem dịch vụ bảo trì website WordPress.
Câu hỏi thường gặp
Làm sao biết website WordPress của tôi có bị hack không?
Không có một dấu hiệu duy nhất. Hãy kiểm tra theo ba lớp: kết quả site: trên Google và thông báo trong Search Console, danh sách quản trị viên và plugin trong WordPress, rồi tệp PHP lạ và tệp lõi không khớp trên máy chủ. Hai dấu hiệu độc lập trở lên là lý do để xử lý nghiêm túc.
Website chạy bình thường thì có thể vẫn bị nhiễm mã độc không?
Có thể. Nhiều mã độc được thiết kế để chủ website không nhìn thấy, ví dụ chỉ hiện nội dung lạ cho khách đến từ Google hoặc cho công cụ tìm kiếm. Vì vậy cần kiểm tra cả từ bên ngoài, không chỉ mở trang bằng trình duyệt quen dùng.
Có nên xóa ngay tài khoản quản trị lạ không?
Không nên làm đầu tiên. Hãy sao lưu và ghi lại tài khoản đó trước, vì xóa tài khoản không đóng cửa hậu đã cài. Sau đó mới xử lý cùng việc đổi mật khẩu, kiểm tra tệp và tìm lỗ hổng.
Lệnh wp core verify-checksums cho biết điều gì?
Nó so sánh tệp lõi WordPress trên máy chủ với tổng kiểm tra chính thức của wordpress.org và báo tệp nào bị sửa hoặc thừa. Nó không kiểm tra theme hay plugin tự viết, và không bắt hết mã độc nằm trong wp-content, nên chỉ là một bước trong danh sách.
Quét bằng plugin bảo mật có đủ không?
Plugin quét giúp phát hiện nhiều mẫu mã độc quen thuộc nhưng không thay thế kiểm tra thủ công. Mã độc mới hoặc được viết riêng có thể lọt, và nếu kẻ xâm nhập đã có quyền quản trị thì có thể tắt plugin quét. Nên kết hợp các lớp kiểm tra khác nhau.
Cần người làm giúp phần này?
Mô tả ngắn nhu cầu hoặc gửi link website. Chúng tôi phản hồi bằng đánh giá cụ thể trước khi báo giá.
