Backdoor (cửa hậu) là đoạn mã cho hacker quay lại website dù bạn đã đổi mật khẩu và dọn sạch mã độc thấy được. Đây là lý do số một khiến web “dọn xong lại dính”. Bài này chỉ cách tìm và xử lý cửa hậu — kèm cảnh báo quan trọng để bạn không xoá nhầm code lành.
Cửa hậu là gì và vì sao nguy hiểm
Khác với mã chèn link rác hay chuyển hướng, cửa hậu không gây hại trực tiếp nên dễ bị bỏ qua. Nhiệm vụ của nó là mở sẵn một lối vào bí mật: kể cả khi bạn vá lỗ hổng và đổi hết mật khẩu, hacker vẫn dùng cửa hậu để chiếm lại web rồi cài lại mọi thứ. Theo báo cáo của Sucuri năm 2023, gần một nửa số website nhiễm có ít nhất một cửa hậu lúc được dọn.

Cách tìm cửa hậu
Cửa hậu thường là file PHP nhận lệnh từ bên ngoài rồi thực thi. Nếu truy cập được dòng lệnh, có thể quét toàn bộ web để tìm các mẫu hàm hay gặp:
grep -RIl --include=*.php -E "eval(|base64_decode(|gzinflate(|str_rot13(|assert(" .Ưu tiên soi: file mới sửa gần đây, file .php trong wp-content/uploads/, thư mục mu-plugins/, và functions.php của theme. Đây cũng là những nơi mã độc hay giấu.
Cảnh báo: đừng xoá mù
Các hàm như base64_decode hay eval cũng xuất hiện trong code hợp lệ của nhiều plugin tốt. Xoá bừa mọi file chứa chúng sẽ làm hỏng web. Dấu hiệu thật của cửa hậu là:
- Code bị làm rối nhiều lớp, chuỗi rất dài và vô nghĩa.
- Nhận dữ liệu từ
$_POST,$_GET,$_REQUEST,$_COOKIErồi đem chạy. - Nằm sai chỗ (ví dụ file PHP trong thư mục uploads) hoặc không khớp với bản gốc khi đối chiếu checksums.
Khi nghi ngờ, hãy so với file gốc thay vì đoán. Một lưu ý nhỏ: mẹo cũ về lỗ hổng preg_replace với cờ /e nay gần như không còn, vì PHP đã gỡ tính năng này từ phiên bản 7 — đừng mất thời gian với nó trừ khi web chạy mã rất cũ.
Vì sao đã dọn vẫn bị lại
Web tái nhiễm thường vì một trong các lý do:
- Sót dù chỉ một cửa hậu.
- Chưa vá lỗ hổng gốc (plugin/theme cũ) nên bị khai thác lại.
- Chưa đổi mật khẩu và thay bộ khoá SALT.
- Máy tính cá nhân của chủ web còn dính mã độc đánh cắp mật khẩu — một xu hướng đáng chú ý trong năm 2024-2025.
Một ví dụ để nhận diện
Một cửa hậu điển hình chỉ vài dòng nhưng cực nguy hiểm — đại ý nó nhận một tham số từ $_REQUEST hoặc $_COOKIE rồi đưa thẳng vào eval() để chạy bất cứ lệnh nào hacker gửi tới. Chúng thường được giấu bằng cách mã hoá chồng nhiều lớp (ví dụ base64_decode lồng trong gzinflate, có khi thêm str_rot13) để mắt người và công cụ đơn giản không đọc ra nội dung thật. Vì thế khi grep ra một file khả nghi, đừng dừng ở việc “nó có chứa base64_decode“; hãy xem nó có nhận dữ liệu từ bên ngoài rồi đem thực thi không — đó mới là dấu hiệu quyết định để phân biệt cửa hậu với code hợp lệ.

Chặn tái nhiễm sau khi dọn
Sau khi truy hết cửa hậu, hãy bật giám sát thay đổi file (file integrity monitoring), dùng tường lửa ứng dụng web (WAF) và quét lại định kỳ. Chi tiết ở bài bảo vệ WordPress khỏi mã độc.
Không chắc đã truy hết?
Tìm cửa hậu đòi hỏi kinh nghiệm phân biệt code lành và code độc. Nếu web cứ dọn lại dính, Web22 nhận rà soát và bóc gỡ tận gốc — gồm cả truy cửa hậu và vá lỗ hổng để chấm dứt vòng tái nhiễm.
Câu hỏi thường gặp
Đổi mật khẩu xong vẫn bị chiếm lại, vì sao?
Gần như chắc chắn còn sót cửa hậu — nó cho hacker vào lại không cần mật khẩu. Phải truy và xoá hết cửa hậu.
Có công cụ nào tìm cửa hậu tự động không?
Các plugin quét server-side giúp khoanh vùng, nhưng vẫn nên chéo-kiểm bằng đối chiếu file gốc, vì cửa hậu được làm rối để né công cụ.
