Xin chào! Chúng tôi có thể giúp gì cho bạn hôm nay?
-
Trang chủ
-
Bảo mật Website
-
Website WordPress Bị Hack: Cách Xử Lý Từng Bước (2026)
Website WordPress Bị Hack: Cách Xử Lý Từng Bước (2026)
Website WordPress bị hack? Nhận biết dấu hiệu, cô lập, quét mã độc, so checksum WP-CLI, tìm backdoor, dọn database, gỡ cảnh báo Google và phòng ngừa tái nhiễm.
Nội dung
Một buổi sáng, khách nhắn rằng website của bạn tự chuyển sang trang cờ bạc. Hoặc Google hiện dòng "Trang web này có thể đã bị tấn công" ngay dưới tên miền. Đó là lúc bạn nhận ra website WordPress bị hack. Đừng hoảng và cũng đừng vội xóa lung tung: xử lý sai thứ tự rất dễ làm mất bằng chứng, xóa nhầm dữ liệu, hoặc để lại backdoor khiến site bị nhiễm lại sau vài ngày.
Bài viết này của TeamDevDesign tổng hợp quy trình cách xử lý web bị hack theo đúng thứ tự, từ nhận biết dấu hiệu đến khôi phục SEO và phòng ngừa. Nội dung dựa trên hướng dẫn chính thức của WordPress.org, Google Search Central và cập nhật quy định pháp luật Việt Nam năm 2026.
Nội dung chính:
- Dấu hiệu website WordPress bị hack
- Bảng chẩn đoán: dấu hiệu, nguyên nhân, việc cần làm
- Quy trình xử lý website WordPress bị hack từng bước
- Tìm backdoor: vị trí và dấu hiệu nhận biết
- Dọn database WordPress bị nhiễm mã độc
- Gỡ cảnh báo Google và khôi phục SEO
- Nếu rò rỉ dữ liệu khách hàng: nghĩa vụ pháp lý
- Phòng ngừa để không bị hack lại
- Checklist tóm tắt
- Câu hỏi thường gặp
1. Dấu hiệu website WordPress bị hack
Nhiều vụ hack được thiết kế để chủ site không nhìn thấy: mã độc chỉ chuyển hướng khách đến từ Google, chỉ hiện trên điện thoại, hoặc chỉ trả spam cho bot tìm kiếm (cloaking). Hãy kiểm tra từ nhiều góc độ.
Dấu hiệu nhìn thấy trên website
- Chuyển hướng lạ: bấm vào kết quả Google thì bị đưa sang trang cờ bạc, thuốc, quà tặng giả hoặc trang yêu cầu "bấm Cho phép để xác minh". Thường chỉ xảy ra lần đầu truy cập hoặc trên di động.
- Thông báo giả: CAPTCHA giả, yêu cầu tải "bản cập nhật trình duyệt".
- Nội dung bị chèn: link ẩn ở footer, iframe lạ, bài viết bạn không hề đăng.
- Không đăng nhập được wp-admin dù mật khẩu đúng, hoặc email quản trị bị đổi.
Dấu hiệu trên Google và công cụ bên ngoài
- Spam SEO tiếng Nhật, cờ bạc, thuốc: gõ
site:tenmien.comtrên Google thấy hàng nghìn trang lạ với tiêu đề tiếng Nhật hoặc từ khóa cá cược. Đây là kiểu "Japanese keyword hack". - Cảnh báo Google Safe Browsing: trình duyệt hiện màn hình đỏ "Trang web lừa đảo" hoặc "Trang web có chứa phần mềm độc hại". Có thể tra cứu tại Google Transparency Report.
- Search Console báo "Vấn đề bảo mật": báo cáo Security Issues phân loại thành chèn mã (code injection), chèn nội dung (content injection), chèn URL (URL injection), phần mềm độc hại và lừa đảo (social engineering).
- Search Console có chủ sở hữu hoặc sitemap lạ: kẻ tấn công thường tự thêm mình vào property để đẩy nhanh việc index trang spam.
Dấu hiệu phía máy chủ
- User admin lạ trong mục Thành viên, thường có tên giống hệ thống như "wpadmin", "support", "wp-update".
- File lạ trong
wp-content/uploads: thư mục này chỉ nên chứa ảnh, PDF, video. Có file.phpở đây gần như chắc chắn là dấu hiệu xấu. - Hosting khóa tài khoản hoặc gửi email cảnh báo site phát tán mã độc, gửi spam.
- CPU, RAM, băng thông tăng vọt bất thường; có cron job lạ; email từ tên miền bị đưa vào danh sách đen.
- File
.htaccess,index.php,wp-config.phpcó ngày sửa đổi mới mà bạn không hề đụng tới.
Lưu ý: Lỗi SSL hết hạn hay quảng cáo bên thứ ba cũng có thể gây cảnh báo trình duyệt. Hãy đối chiếu nhiều dấu hiệu.
2. Bảng chẩn đoán: dấu hiệu, nguyên nhân có thể, việc cần làm
| Dấu hiệu | Nguyên nhân có thể | Việc cần làm ngay |
|---|---|---|
| Chuyển hướng sang trang lạ (nhất là trên di động) | Mã JS chèn vào theme, bài viết hoặc wp_options; luật chuyển hướng trong .htaccess | Kiểm tra .htaccess, siteurl/home, tìm thẻ script lạ trong database |
| Hàng nghìn trang spam tiếng Nhật/cờ bạc trên Google | URL injection, file PHP sinh trang động, cloaking theo User-Agent | Tìm file sinh trang, xóa sitemap lạ, gỡ chủ sở hữu lạ trong Search Console |
| Cảnh báo đỏ Safe Browsing | Phát tán malware hoặc trang lừa đảo | Cô lập site, dọn sạch, rồi mới gửi yêu cầu xem xét lại |
| User admin lạ | Lộ mật khẩu, lỗ hổng leo thang quyền trong plugin | Xóa user lạ, đổi toàn bộ mật khẩu, đổi salt keys |
File .php trong uploads | Lỗ hổng upload file tùy ý trong plugin/theme | Xóa file, chặn thực thi PHP trong uploads, cập nhật plugin lỗi |
| CPU tăng, hosting khóa tài khoản | Script gửi spam, đào tiền ảo, tấn công site khác | Liên hệ hosting, xem cron và tiến trình, quét toàn tài khoản |
| Site bị nhiễm lại sau khi dọn | Backdoor còn sót, mật khẩu cũ, plugin lỗi chưa vá, site khác cùng hosting | Thay core/plugin từ nguồn gốc, quét mọi site trong tài khoản |
3. Quy trình xử lý website WordPress bị hack từng bước
Thứ tự dưới đây bám theo tài liệu FAQ My site was hacked của WordPress.org, bổ sung thêm các bước thực hành với WP-CLI.
Bước 1: Ghi chép và cô lập website
Ghi lại bạn thấy gì, lúc mấy giờ, gần đây có cài plugin hay sửa theme gì không. Sau đó cô lập site:
- Bật chế độ bảo trì (maintenance) hoặc tạm chặn truy cập bằng mật khẩu thư mục, chỉ cho IP của bạn vào.
- Nhiều site chung một tài khoản hosting thì coi tất cả đều có thể đã nhiễm.
- Báo nhà cung cấp hosting: họ có log truy cập và bản backup.
Bước 2: Sao lưu hiện trạng để điều tra
Trước khi xóa bất cứ thứ gì, tải về toàn bộ mã nguồn, database và log truy cập (access log, error log). Bản sao "bẩn" này giúp bạn tìm đường xâm nhập và lấy lại dữ liệu nếu dọn nhầm. Không bao giờ khôi phục bản này lên site đang chạy.
Bước 3: Đổi toàn bộ mật khẩu và quét máy tính cá nhân
Đổi mật khẩu cho mọi điểm truy cập: tài khoản hosting/cPanel/aaPanel, FTP/SFTP, SSH, user database (nhớ cập nhật DB_PASSWORD trong wp-config.php), mọi tài khoản quản trị WordPress, email quản trị và tài khoản nhà đăng ký tên miền. WordPress.org cũng khuyên quét virus máy tính của bạn, vì trojan trên máy cá nhân có thể đánh cắp mật khẩu FTP và wp-admin. Sau khi site đã sạch, đổi mật khẩu thêm một lần nữa.
Bước 4: Quét mã độc từ bên trong và bên ngoài
Không công cụ nào phát hiện được mọi thứ, nên hãy kết hợp quét từ bên ngoài (Sucuri SiteCheck, VirusTotal), quét từ bên trong (plugin Wordfence hoặc Sucuri Security) và so sánh checksum bằng WP-CLI.
Lệnh wp core verify-checksums tải mã băm MD5 chính thức từ WordPress.org và so với file đang có. Lệnh wp plugin verify-checksums làm tương tự với plugin:
# Kiểm tra file lõi WordPress, cảnh báo cả file lạ ở thư mục gốc
wp core verify-checksums --include-root
# Kiểm tra toàn bộ plugin tải từ WordPress.org
wp plugin verify-checksums --all
# Liệt kê tài khoản quản trị để tìm user lạ
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered
Lưu ý: wp plugin verify-checksums chỉ đối chiếu được plugin có trên kho WordPress.org. Plugin trả phí hoặc tự viết sẽ không có checksum, bạn cần tải lại bản gốc từ nhà phát triển rồi so sánh.
Bước 5: Thay lại core, plugin, theme từ nguồn chính thức
Thay vì sửa từng file nhiễm, hãy thay mới toàn bộ những gì có thể tải lại:
- Core: xóa hẳn
wp-adminvàwp-includesrồi tải bản sạch cùng phiên bản. WordPress.org khuyên không dùng nút "Cài đặt lại" trong wp-admin, vì trình cài chỉ ghi đè file có sẵn, còn mã độc thường là file mới thêm vào. Với WP-CLI:wp core download --version=<phiên-bản> --skip-content --force. - Plugin: xóa thư mục plugin rồi cài lại từ WordPress.org hoặc trang nhà phát triển. Gỡ hẳn plugin không dùng và mọi bản "nulled", bản crack.
- Theme: cài lại theme gốc sạch, chỉ chép lại phần tùy biến sau khi đã đọc kỹ. Xóa theme không dùng.
- Kiểm tra tay những file không thay được:
wp-config.php,.htaccess(ở gốc và trong các thư mục con), thư mụcmu-plugins,uploads.
Bước 6: Đổi salt keys để đăng xuất mọi phiên
Kẻ tấn công có thể vẫn giữ cookie đăng nhập hợp lệ. Thay bộ khóa bảo mật (AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, NONCE_KEY và các SALT) trong wp-config.php sẽ buộc mọi người đăng xuất. Lấy bộ mới tại trình tạo khóa của WordPress.org, hoặc dùng lệnh:
wp config shuffle-salts
Bước 7: Khôi phục từ backup sạch (nếu có)
Nếu có bản backup trước thời điểm bị nhiễm, khôi phục thường nhanh hơn dọn tay. Nhưng backup không vá lỗ hổng: nếu không cập nhật plugin lỗi và đổi mật khẩu, site sẽ bị hack lại theo đường cũ. Hãy quét chính bản backup trước khi dùng.
4. Tìm backdoor: vị trí thường gặp và dấu hiệu nhận biết
Backdoor là đoạn mã cho phép kẻ tấn công quay lại kể cả khi bạn đã đổi mật khẩu, lý do nhiều site "dọn xong vài hôm lại bị".
Vị trí hay bị cài backdoor
- File PHP trong
wp-content/uploads,wp-content/upgrade, thư mục cache. wp-content/mu-plugins: plugin bắt buộc tự chạy, không hiện trong danh sách plugin thông thường.functions.php,header.php,footer.phpcủa theme;index.phpvàwp-config.phpở thư mục gốc.- File mang tên giả file hệ thống như
wp-login1.php,wp-cache.php,class-wp-xyz.phpnằm sai chỗ. - Plugin "ma" có tên chung chung, không có trên WordPress.org, đôi khi tự ẩn khỏi trang quản trị.
Dấu hiệu trong mã nguồn
- Hàm giải mã, thực thi chuỗi lồng nhau:
eval,base64_decode,gzinflate,str_rot13,assert,create_function. - Dữ liệu từ
$_POST,$_REQUEST,$_COOKIEđược đưa thẳng vào hàm thực thi. - Chuỗi ký tự dài vô nghĩa, biến tên ngẫu nhiên, mã dồn trên một dòng rất dài.
Một vài lệnh tìm kiếm giúp khoanh vùng nhanh (chạy trên bản sao hoặc qua SSH):
# File PHP nằm trong thư mục uploads (thường không nên có)
find wp-content/uploads -type f -name "*.php"
# File PHP bị sửa trong 7 ngày gần nhất
find . -type f -name "*.php" -mtime -7
# Các hàm hay xuất hiện trong mã bị làm rối
grep -rnE "eval\(|base64_decode\(|gzinflate\(|str_rot13\(" wp-content --include=*.php
Kết quả
grepsẽ có cả plugin hợp lệ (nhiều plugin dùngbase64_decodecho mục đích bình thường). Đừng xóa theo phản xạ, hãy so với bản gốc của plugin. Nếu chưa vững về PHP, xem thêm bài các lỗ hổng bảo mật PHP thường gặp.
5. Dọn database WordPress bị nhiễm mã độc
Nhiều mã độc nằm trong database nên vẫn sống sót sau khi cài lại core. Các truy vấn dưới đây chỉ đọc để tìm, không xóa:
# Kiểm tra địa chỉ site có bị đổi sang tên miền lạ
wp option get siteurl
wp option get home
# Tìm script chèn vào bảng options và bài viết
wp db query "SELECT option_name FROM wp_options WHERE option_value LIKE '%<script%'"
wp db query "SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%<script%' OR post_content LIKE '%<iframe%'"
# Liệt kê tác vụ cron để tìm hook lạ
wp cron event list
- wp_options: kiểm tra
siteurl,home,active_plugins, các widget HTML và tùy chọn theme có chứa script. - wp_users và wp_usermeta: xóa user lạ, kiểm tra quyền
wp_capabilitiescủa từng tài khoản. - Nội dung spam: xóa bài, trang, bình luận spam được tạo hàng loạt; lọc theo ngày tạo trùng thời điểm bị hack.
Nếu tiền tố bảng khác wp_, hãy thay cho đúng. Dữ liệu serialized không nên sửa bằng tìm-thay thông thường.
6. Gỡ cảnh báo Google và khôi phục website bị hack về SEO
Khi site đã sạch và lỗ hổng đã vá, mới đến bước làm việc với Google:
- Kiểm tra quyền trong Search Console: gỡ chủ sở hữu, người dùng và sitemap lạ.
- Kiểm tra bằng công cụ Kiểm tra URL để xem Googlebot nhận được nội dung gì, phát hiện cloaking.
- Trả mã 404 hoặc 410 cho các URL spam đã xóa. Có thể dùng công cụ Xóa URL để ẩn tạm thời các trang tệ nhất.
- Gửi "Yêu cầu xem xét" trong báo cáo Vấn đề bảo mật, mô tả rõ vấn đề, các bước đã làm và kết quả.
Theo trang trợ giúp Search Console, việc xem xét có thể mất từ vài ngày đến vài tuần; trường hợp spam thường lâu hơn malware vì có thể cần kiểm tra thủ công. Đừng gửi lại khi yêu cầu trước còn đang chờ. Nếu thứ hạng tụt mạnh sau sự cố, bạn có thể tham khảo dịch vụ tối ưu website chuẩn SEO và tốc độ.
Theo dõi sau xử lý
- Xem Search Console hằng tuần trong 1 đến 2 tháng: số trang index, truy vấn lạ.
- Bật cảnh báo thay đổi file và đăng nhập trong plugin bảo mật.
- Xem access log tìm request lạ đến file PHP trong uploads.
7. Nếu rò rỉ dữ liệu cá nhân khách hàng: nghĩa vụ pháp lý
Nếu website lưu thông tin khách hàng (đơn hàng WooCommerce, form liên hệ, tài khoản thành viên) và có dấu hiệu dữ liệu bị lấy cắp, việc xử lý không chỉ là kỹ thuật. Từ ngày 01/01/2026, Luật Bảo vệ dữ liệu cá nhân số 91/2025/QH15 có hiệu lực. Điều 23 của Luật quy định khi phát hiện vi phạm có thể gây tổn hại (như đến tài sản, danh dự của chủ thể dữ liệu), bên kiểm soát dữ liệu phải thông báo cho cơ quan chuyên trách bảo vệ dữ liệu cá nhân (thuộc Bộ Công an) chậm nhất 72 giờ kể từ khi phát hiện.
Nghị định 13/2023/NĐ-CP trước đây cũng có yêu cầu 72 giờ, nhưng đã được thay thế bởi Nghị định 356/2025/NĐ-CP (hiệu lực cùng ngày 01/01/2026), quy định chi tiết mẫu thông báo và cách gửi. Đây là thông tin tham khảo; trường hợp cụ thể nên hỏi ý kiến luật sư. Hãy giữ nguyên log, bản sao hiện trạng và ghi rõ thời điểm phát hiện.
8. Phòng ngừa để website WordPress không bị hack lại
Theo báo cáo State of WordPress Security in 2026 của Patchstack, năm 2025 có 11.334 lỗ hổng mới trong hệ sinh thái WordPress, trong đó 91% nằm ở plugin, 9% ở theme, còn core chỉ có 6 lỗ hổng mức thấp. Patchstack cũng ghi nhận 46% lỗ hổng chưa có bản vá khi công bố. Nghĩa là phần lớn rủi ro đến từ thứ bạn cài thêm.
- Cập nhật và rút gọn plugin: xóa plugin không dùng, tránh bản nulled. Đọc thêm lỗ hổng plugin WordPress và cách kiểm tra.
- Bảo vệ trang đăng nhập: mật khẩu dài, duy nhất, bật 2FA, giới hạn đăng nhập sai. Xem hướng dẫn bảo mật đăng nhập WordPress.
- Gia cố WordPress: tắt sửa file trong dashboard (
DISALLOW_FILE_EDIT), chặn thực thi PHP trong uploads, phân quyền file đúng. Tổng quan có trong bài lỗ hổng bảo mật WordPress. - Gia cố máy chủ nếu dùng VPS: firewall, SSH key, Fail2Ban, theo bài bảo mật VPS Linux.
- Backup tự động, lưu ngoài máy chủ, giữ nhiều phiên bản và tách các site khác nhau ra user hosting riêng.
Nếu không có thời gian tự theo dõi, bạn có thể tham khảo gói bảo trì và quản trị website của TeamDevDesign.
9. Checklist tóm tắt xử lý web bị hack
- Ghi chép triệu chứng, báo hosting, bật bảo trì.
- Sao lưu hiện trạng (file, database, log).
- Đổi mật khẩu hosting, FTP/SSH, database, admin, email.
- Quét Sucuri SiteCheck, Wordfence; chạy
verify-checksumscho core và plugin. - Thay core, plugin, theme từ nguồn chính thức.
- Tìm backdoor; dọn database.
- Đổi salt keys; đổi mật khẩu lần hai; vá nguyên nhân gốc.
- Gửi yêu cầu xem xét trên Search Console.
- Đánh giá nghĩa vụ thông báo nếu lộ dữ liệu cá nhân.
- Theo dõi 1 đến 2 tháng.
10. Câu hỏi thường gặp
Tìm site:tenmien.com trên Google, kiểm tra báo cáo Vấn đề bảo mật trong Search Console, quét bằng Sucuri SiteCheck và chạy wp core verify-checksums. Thử truy cập từ điện thoại qua kết quả Google, vì nhiều mã độc chỉ chuyển hướng trong trường hợp này.
Không phải tất cả. Backdoor trong database, file bị làm rối kỹ hoặc plugin trả phí vẫn cần kiểm tra thủ công.
Chưa. Lỗ hổng vẫn còn; bạn vẫn phải cập nhật plugin, đổi mật khẩu và salt keys.
Theo Google, thường từ vài ngày đến vài tuần. Trường hợp bị chèn spam có thể lâu hơn do cần xem xét thủ công. Chỉ gửi khi đã dọn sạch hoàn toàn.
Lời kết
Xử lý website WordPress bị hack cần bình tĩnh và đúng thứ tự: cô lập, sao lưu hiện trạng, đổi mật khẩu, so checksum, thay file từ nguồn gốc, săn backdoor, dọn database, đổi salt keys rồi mới gửi Google xem xét. Quan trọng nhất là tìm ra đường kẻ tấn công đã vào và đóng nó lại. Nếu cần người cùng rà soát hoặc khôi phục website, bạn có thể liên hệ TeamDevDesign để trao đổi.
Chia sẻ bài viết này:
Nội dung
Bài Viết Liên Quan
Các lỗ hổng bảo mật PHP phổ biến 2026: SQL injection, XSS, CSRF, upload file, deserialization, php.i...
Lỗ hổng bảo mật WordPress phổ biến (XSS, SQLi, CSRF, phân quyền sai), số liệu Patchstack 2025 và che...
Lỗ hổng plugin WordPress chiếm 91% lỗ hổng mới năm 2025. Xem 5 CVE có thật, rủi ro plugin nulled, cá...